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

Commit 353613ca authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "fix client pid for effects applied by audio policy"

parents 0c654401 b643627a
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -196,6 +196,7 @@ public:
                                    audio_io_handle_t output,
                                    audio_io_handle_t output,
                                    audio_session_t sessionId,
                                    audio_session_t sessionId,
                                    const String16& callingPackage,
                                    const String16& callingPackage,
                                    pid_t pid,
                                    status_t *status,
                                    status_t *status,
                                    int *id,
                                    int *id,
                                    int *enabled) = 0;
                                    int *enabled) = 0;
+3 −2
Original line number Original line 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);
    mDescriptor.uuid = *(uuid != NULL ? uuid : EFFECT_UUID_NULL);


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


    iEffect = audioFlinger->createEffect((effect_descriptor_t *)&mDescriptor,
    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)) {
    if (iEffect == 0 || (mStatus != NO_ERROR && mStatus != ALREADY_EXISTS)) {
        ALOGE("set(): AudioFlinger could not create effect, status: %d", mStatus);
        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;
    mCblk->buffer = (uint8_t *)mCblk + bufOffset;


    IInterface::asBinder(iEffect)->linkToDeath(mIEffectClient);
    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,
    ALOGV("set() %p OK effect: %s id: %d status %d enabled %d pid %d", this, mDescriptor.name, mId,
            mStatus, mEnabled, mClientPid);
            mStatus, mEnabled, mClientPid);


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


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

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


            sp<IEffect> effect = createEffect(&desc, client, priority, output, sessionId,
            sp<IEffect> effect = createEffect(&desc, client, priority, output, sessionId,
                    opPackageName, &status, &id, &enabled);
                    opPackageName, pid, &status, &id, &enabled);
            reply->writeInt32(status);
            reply->writeInt32(status);
            reply->writeInt32(id);
            reply->writeInt32(id);
            reply->writeInt32(enabled);
            reply->writeInt32(enabled);
+10 −1
Original line number Original line Diff line number Diff line
@@ -2606,6 +2606,7 @@ sp<IEffect> AudioFlinger::createEffect(
        audio_io_handle_t io,
        audio_io_handle_t io,
        audio_session_t sessionId,
        audio_session_t sessionId,
        const String16& opPackageName,
        const String16& opPackageName,
        pid_t pid,
        status_t *status,
        status_t *status,
        int *id,
        int *id,
        int *enabled)
        int *enabled)
@@ -2614,7 +2615,15 @@ sp<IEffect> AudioFlinger::createEffect(
    sp<EffectHandle> handle;
    sp<EffectHandle> handle;
    effect_descriptor_t desc;
    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",
    ALOGV("createEffect pid %d, effectClient %p, priority %d, sessionId %d, io %d, factory %p",
            pid, effectClient.get(), priority, sessionId, io, mEffectsFactoryHal.get());
            pid, effectClient.get(), priority, sessionId, io, mEffectsFactoryHal.get());


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