Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ba95108b authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Security Fix: Race Condition + NPE" into qt-qpr1-dev am: 8a00254d

Change-Id: Ieff88bbc396d67d484a217d9497f058ba946f6a1
parents 757ed290 8a00254d
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -266,7 +266,9 @@ status_t StatsService::onTransact(uint32_t code, const Parcel& data, Parcel* rep
                    IResultReceiver::asInterface(data.readStrongBinder());

            err = command(in, out, err, args, resultReceiver);
            if (resultReceiver != nullptr) {
                resultReceiver->send(err);
            }
            return NO_ERROR;
        }
        default: { return BnStatsManager::onTransact(code, data, reply, flags); }
@@ -411,13 +413,20 @@ status_t StatsService::command(int in, int out, int err, Vector<String8>& args,
            return cmd_trigger_active_config_broadcast(out, args);
        }
        if (!args[0].compare(String8("data-subscribe"))) {
            {
                std::lock_guard<std::mutex> lock(mShellSubscriberMutex);
                if (mShellSubscriber == nullptr) {
                    mShellSubscriber = new ShellSubscriber(mUidMap, mPullerManager);
                }
            }
            int timeoutSec = -1;
            if (argCount >= 2) {
                timeoutSec = atoi(args[1].c_str());
            }
            if (resultReceiver == nullptr) {
                ALOGI("Null resultReceiver given, no subscription will be started");
                return UNEXPECTED_NULL;
            }
            mShellSubscriber->startNewSubscription(in, out, resultReceiver, timeoutSec);
            return NO_ERROR;
        }
+4 −0
Original line number Diff line number Diff line
@@ -432,6 +432,10 @@ private:

    sp<ShellSubscriber> mShellSubscriber;

    /**
     * Mutex for setting the shell subscriber
     */
    mutable mutex mShellSubscriberMutex;
    std::shared_ptr<LogEventQueue> mEventQueue;

    FRIEND_TEST(StatsLogProcessorTest, TestActivationsPersistAcrossSystemServerRestart);