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

Commit 8b0bfd91 authored by Andy Hung's avatar Andy Hung
Browse files

AudioFlinger: Propagate uid info for AudioSession references

Enables better tracking of permission.
Improves dumpsys of global AudioSession references.

Test: Clarity effects
Test: adb shell dumpsys media.audio_flinger
Bug: 129355845
Change-Id: Ia0226c7047bb38b74e8b0cb67f12ec581b496631
parent 255f610f
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -138,6 +138,7 @@ status_t AudioEffect::set(const effect_uuid_t *type,

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

    iEffect = audioFlinger->createEffect((effect_descriptor_t *)&mDescriptor,
            mIEffectClient, priority, io, mSessionId, device, mOpPackageName, mClientPid,
@@ -179,7 +180,7 @@ status_t AudioEffect::set(const effect_uuid_t *type,
            mStatus, mEnabled, mClientPid);

    if (!audio_is_global_session(mSessionId)) {
        AudioSystem::acquireAudioSessionId(mSessionId, mClientPid);
        AudioSystem::acquireAudioSessionId(mSessionId, mClientPid, mClientUid);
    }

    return mStatus;
+2 −2
Original line number Diff line number Diff line
@@ -186,7 +186,7 @@ AudioRecord::~AudioRecord()
        IPCThreadState::self()->flushCommands();
        ALOGV("%s(%d): releasing session id %d",
                __func__, mPortId, mSessionId);
        AudioSystem::releaseAudioSessionId(mSessionId, -1 /*pid*/);
        AudioSystem::releaseAudioSessionId(mSessionId, mClientPid);
    }
}

@@ -361,7 +361,7 @@ status_t AudioRecord::set(
    mMarkerReached = false;
    mNewPosition = 0;
    mUpdatePeriod = 0;
    AudioSystem::acquireAudioSessionId(mSessionId, -1);
    AudioSystem::acquireAudioSessionId(mSessionId, mClientPid, mClientUid);
    mSequence = 1;
    mObservedSequence = mSequence;
    mInOverrun = false;
+2 −2
Original line number Diff line number Diff line
@@ -434,11 +434,11 @@ audio_unique_id_t AudioSystem::newAudioUniqueId(audio_unique_id_use_t use)
    return af->newAudioUniqueId(use);
}

void AudioSystem::acquireAudioSessionId(audio_session_t audioSession, pid_t pid)
void AudioSystem::acquireAudioSessionId(audio_session_t audioSession, pid_t pid, uid_t uid)
{
    const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
    if (af != 0) {
        af->acquireAudioSessionId(audioSession, pid);
        af->acquireAudioSessionId(audioSession, pid, uid);
    }
}

+1 −1
Original line number Diff line number Diff line
@@ -599,7 +599,7 @@ status_t AudioTrack::set(
    mReleased = 0;
    mStartNs = 0;
    mStartFromZeroUs = 0;
    AudioSystem::acquireAudioSessionId(mSessionId, mClientPid);
    AudioSystem::acquireAudioSessionId(mSessionId, mClientPid, mClientUid);
    mSequence = 1;
    mObservedSequence = mSequence;
    mInUnderrun = false;
+6 −4
Original line number Diff line number Diff line
@@ -571,12 +571,13 @@ public:
        return id;
    }

    virtual void acquireAudioSessionId(audio_session_t audioSession, int pid)
    void acquireAudioSessionId(audio_session_t audioSession, pid_t pid, uid_t uid) override
    {
        Parcel data, reply;
        data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
        data.writeInt32(audioSession);
        data.writeInt32(pid);
        data.writeInt32((int32_t)pid);
        data.writeInt32((int32_t)uid);
        remote()->transact(ACQUIRE_AUDIO_SESSION_ID, data, &reply);
    }

@@ -1326,8 +1327,9 @@ status_t BnAudioFlinger::onTransact(
        case ACQUIRE_AUDIO_SESSION_ID: {
            CHECK_INTERFACE(IAudioFlinger, data, reply);
            audio_session_t audioSession = (audio_session_t) data.readInt32();
            int pid = data.readInt32();
            acquireAudioSessionId(audioSession, pid);
            const pid_t pid = (pid_t)data.readInt32();
            const uid_t uid = (uid_t)data.readInt32();
            acquireAudioSessionId(audioSession, pid, uid);
            return NO_ERROR;
        } break;
        case RELEASE_AUDIO_SESSION_ID: {
Loading