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

Commit b643627a authored by Eric Laurent's avatar Eric Laurent
Browse files

fix client pid for effects applied by audio policy

Test: Hangouts call, Play Music with and w/o effects

Change-Id: Ia9b20f94be667dd92e0497f8ef9c0dc0e95afe28
parent 8526d86a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -196,6 +196,7 @@ public:
                                    audio_io_handle_t output,
                                    audio_session_t sessionId,
                                    const String16& callingPackage,
                                    pid_t pid,
                                    status_t *status,
                                    int *id,
                                    int *enabled) = 0;
+3 −2
Original line number Diff line number Diff line
@@ -128,9 +128,11 @@ status_t AudioEffect::set(const effect_uuid_t *type,
    mDescriptor.uuid = *(uuid != NULL ? uuid : EFFECT_UUID_NULL);

    mIEffectClient = new EffectClient(this);
    mClientPid = IPCThreadState::self()->getCallingPid();

    iEffect = audioFlinger->createEffect((effect_descriptor_t *)&mDescriptor,
            mIEffectClient, priority, io, mSessionId, mOpPackageName, &mStatus, &mId, &enabled);
            mIEffectClient, priority, io, mSessionId, mOpPackageName, mClientPid,
            &mStatus, &mId, &enabled);

    if (iEffect == 0 || (mStatus != NO_ERROR && mStatus != ALREADY_EXISTS)) {
        ALOGE("set(): AudioFlinger could not create effect, status: %d", mStatus);
@@ -156,7 +158,6 @@ status_t AudioEffect::set(const effect_uuid_t *type,
    mCblk->buffer = (uint8_t *)mCblk + bufOffset;

    IInterface::asBinder(iEffect)->linkToDeath(mIEffectClient);
    mClientPid = IPCThreadState::self()->getCallingPid();
    ALOGV("set() %p OK effect: %s id: %d status %d enabled %d pid %d", this, mDescriptor.name, mId,
            mStatus, mEnabled, mClientPid);

+5 −1
Original line number Diff line number Diff line
@@ -716,6 +716,7 @@ public:
                                    audio_io_handle_t output,
                                    audio_session_t sessionId,
                                    const String16& opPackageName,
                                    pid_t pid,
                                    status_t *status,
                                    int *id,
                                    int *enabled)
@@ -737,6 +738,7 @@ public:
        data.writeInt32((int32_t) output);
        data.writeInt32(sessionId);
        data.writeString16(opPackageName);
        data.writeInt32((int32_t) pid);

        status_t lStatus = remote()->transact(CREATE_EFFECT, data, &reply);
        if (lStatus != NO_ERROR) {
@@ -1294,12 +1296,14 @@ status_t BnAudioFlinger::onTransact(
            audio_io_handle_t output = (audio_io_handle_t) data.readInt32();
            audio_session_t sessionId = (audio_session_t) data.readInt32();
            const String16 opPackageName = data.readString16();
            pid_t pid = (pid_t)data.readInt32();

            status_t status = NO_ERROR;
            int id = 0;
            int enabled = 0;

            sp<IEffect> effect = createEffect(&desc, client, priority, output, sessionId,
                    opPackageName, &status, &id, &enabled);
                    opPackageName, pid, &status, &id, &enabled);
            reply->writeInt32(status);
            reply->writeInt32(id);
            reply->writeInt32(enabled);
+10 −1
Original line number Diff line number Diff line
@@ -2606,6 +2606,7 @@ sp<IEffect> AudioFlinger::createEffect(
        audio_io_handle_t io,
        audio_session_t sessionId,
        const String16& opPackageName,
        pid_t pid,
        status_t *status,
        int *id,
        int *enabled)
@@ -2614,7 +2615,15 @@ sp<IEffect> AudioFlinger::createEffect(
    sp<EffectHandle> handle;
    effect_descriptor_t desc;

    pid_t pid = IPCThreadState::self()->getCallingPid();
    const uid_t callingUid = IPCThreadState::self()->getCallingUid();
    if (pid == -1 || !isTrustedCallingUid(callingUid)) {
        const pid_t callingPid = IPCThreadState::self()->getCallingPid();
        ALOGW_IF(pid != -1 && pid != callingPid,
                 "%s uid %d pid %d tried to pass itself off as pid %d",
                 __func__, callingUid, callingPid, pid);
        pid = callingPid;
    }

    ALOGV("createEffect pid %d, effectClient %p, priority %d, sessionId %d, io %d, factory %p",
            pid, effectClient.get(), priority, sessionId, io, mEffectsFactoryHal.get());

+1 −0
Original line number Diff line number Diff line
@@ -224,6 +224,7 @@ public:
                        audio_io_handle_t io,
                        audio_session_t sessionId,
                        const String16& opPackageName,
                        pid_t pid,
                        status_t *status /*non-NULL*/,
                        int *id,
                        int *enabled);
Loading