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

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

Fix android.permission.CAPTURE_AUDIO_OUTPUT permission check

Make sure we use the correct PID and UID when checking
android.permission.CAPTURE_AUDIO_OUTPUT permission from audio
policy service.

Bug: 28772898
Change-Id: I8f0c45bf7a5728b4364a451eefb6c025892ae9a5
parent a0e10ff0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -238,6 +238,7 @@ public:
    static status_t getInputForAttr(const audio_attributes_t *attr,
                                    audio_io_handle_t *input,
                                    audio_session_t session,
                                    pid_t pid,
                                    uid_t uid,
                                    uint32_t samplingRate,
                                    audio_format_t format,
+1 −0
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ public:
    virtual status_t  getInputForAttr(const audio_attributes_t *attr,
                              audio_io_handle_t *input,
                              audio_session_t session,
                              pid_t pid,
                              uid_t uid,
                              uint32_t samplingRate,
                              audio_format_t format,
+3 −1
Original line number Diff line number Diff line
@@ -38,7 +38,9 @@ struct AudioSource : public MediaSource, public MediaBufferObserver {
            const String16 &opPackageName,
            uint32_t sampleRate,
            uint32_t channels,
            uint32_t outSampleRate = 0);
            uint32_t outSampleRate = 0,
            uid_t uid = -1,
            pid_t pid = -1);

    status_t initCheck() const;

+2 −1
Original line number Diff line number Diff line
@@ -533,7 +533,8 @@ status_t AudioRecord::openRecord_l(const Modulo<uint32_t> &epoch, const String16
    status = AudioSystem::getInputForAttr(&mAttributes, &input,
                                        mSessionId,
                                        // FIXME compare to AudioTrack
                                        IPCThreadState::self()->getCallingUid(),
                                        mClientPid,
                                        mClientUid,
                                        mSampleRate, mFormat, mChannelMask,
                                        mFlags, mSelectedDeviceId);

+3 −1
Original line number Diff line number Diff line
@@ -836,6 +836,7 @@ void AudioSystem::releaseOutput(audio_io_handle_t output,
status_t AudioSystem::getInputForAttr(const audio_attributes_t *attr,
                                audio_io_handle_t *input,
                                audio_session_t session,
                                pid_t pid,
                                uid_t uid,
                                uint32_t samplingRate,
                                audio_format_t format,
@@ -846,7 +847,8 @@ status_t AudioSystem::getInputForAttr(const audio_attributes_t *attr,
    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
    if (aps == 0) return NO_INIT;
    return aps->getInputForAttr(
            attr, input, session, uid, samplingRate, format, channelMask, flags, selectedDeviceId);
            attr, input, session, pid, uid,
            samplingRate, format, channelMask, flags, selectedDeviceId);
}

status_t AudioSystem::startInput(audio_io_handle_t input,
Loading