Loading media/libmediaplayerservice/MediaRecorderClient.cpp +2 −1 Original line number Original line Diff line number Diff line Loading @@ -127,7 +127,8 @@ status_t MediaRecorderClient::setAudioSource(int as) pid_t pid = IPCThreadState::self()->getCallingPid(); pid_t pid = IPCThreadState::self()->getCallingPid(); uid_t uid = IPCThreadState::self()->getCallingUid(); uid_t uid = IPCThreadState::self()->getCallingUid(); if ((as == AUDIO_SOURCE_FM_TUNER && !captureAudioOutputAllowed(pid, uid)) if ((as == AUDIO_SOURCE_FM_TUNER && !(captureAudioOutputAllowed(pid, uid) || captureTunerAudioInputAllowed(pid, uid))) || !recordingAllowed(String16(""), pid, uid)) { || !recordingAllowed(String16(""), pid, uid)) { return PERMISSION_DENIED; return PERMISSION_DENIED; } } Loading media/utils/ServiceUtilities.cpp +8 −0 Original line number Original line Diff line number Diff line Loading @@ -164,6 +164,14 @@ bool captureMediaOutputAllowed(pid_t pid, uid_t uid) { return ok; return ok; } } bool captureTunerAudioInputAllowed(pid_t pid, uid_t uid) { if (isAudioServerOrRootUid(uid)) return true; static const String16 sCaptureTunerAudioInput("android.permission.CAPTURE_TUNER_AUDIO_INPUT"); bool ok = PermissionCache::checkPermission(sCaptureTunerAudioInput, pid, uid); if (!ok) ALOGV("Request requires android.permission.CAPTURE_TUNER_AUDIO_INPUT"); return ok; } bool captureVoiceCommunicationOutputAllowed(pid_t pid, uid_t uid) { bool captureVoiceCommunicationOutputAllowed(pid_t pid, uid_t uid) { if (isAudioServerOrRootUid(uid)) return true; if (isAudioServerOrRootUid(uid)) return true; static const String16 sCaptureVoiceCommOutput( static const String16 sCaptureVoiceCommOutput( Loading media/utils/include/mediautils/ServiceUtilities.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -84,6 +84,7 @@ bool startRecording(const String16& opPackageName, pid_t pid, uid_t uid, audio_s void finishRecording(const String16& opPackageName, uid_t uid, audio_source_t source); void finishRecording(const String16& opPackageName, uid_t uid, audio_source_t source); bool captureAudioOutputAllowed(pid_t pid, uid_t uid); bool captureAudioOutputAllowed(pid_t pid, uid_t uid); bool captureMediaOutputAllowed(pid_t pid, uid_t uid); bool captureMediaOutputAllowed(pid_t pid, uid_t uid); bool captureTunerAudioInputAllowed(pid_t pid, uid_t uid); bool captureVoiceCommunicationOutputAllowed(pid_t pid, uid_t uid); bool captureVoiceCommunicationOutputAllowed(pid_t pid, uid_t uid); bool captureHotwordAllowed(const String16& opPackageName, pid_t pid, uid_t uid); bool captureHotwordAllowed(const String16& opPackageName, pid_t pid, uid_t uid); bool settingsAllowed(); bool settingsAllowed(); Loading services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp +11 −5 Original line number Original line Diff line number Diff line Loading @@ -454,8 +454,9 @@ status_t AudioPolicyService::getInputForAttr(const audio_attributes_t *attr, } } // check calling permissions. // check calling permissions. // Capturing from FM_TUNER source is controlled by captureAudioOutputAllowed() only as this // Capturing from FM_TUNER source is controlled by captureTunerAudioInputAllowed() and // does not affect users privacy as does capturing from an actual microphone. // captureAudioOutputAllowed() (deprecated) as this does not affect users privacy // as does capturing from an actual microphone. if (!(recordingAllowed(opPackageName, pid, uid) || attr->source == AUDIO_SOURCE_FM_TUNER)) { if (!(recordingAllowed(opPackageName, pid, uid) || attr->source == AUDIO_SOURCE_FM_TUNER)) { ALOGE("%s permission denied: recording not allowed for uid %d pid %d", ALOGE("%s permission denied: recording not allowed for uid %d pid %d", __func__, uid, pid); __func__, uid, pid); Loading @@ -466,9 +467,14 @@ status_t AudioPolicyService::getInputForAttr(const audio_attributes_t *attr, if ((inputSource == AUDIO_SOURCE_VOICE_UPLINK || if ((inputSource == AUDIO_SOURCE_VOICE_UPLINK || inputSource == AUDIO_SOURCE_VOICE_DOWNLINK || inputSource == AUDIO_SOURCE_VOICE_DOWNLINK || inputSource == AUDIO_SOURCE_VOICE_CALL || inputSource == AUDIO_SOURCE_VOICE_CALL || inputSource == AUDIO_SOURCE_ECHO_REFERENCE|| inputSource == AUDIO_SOURCE_ECHO_REFERENCE) inputSource == AUDIO_SOURCE_FM_TUNER) && && !canCaptureOutput) { !canCaptureOutput) { return PERMISSION_DENIED; } if (inputSource == AUDIO_SOURCE_FM_TUNER && !captureTunerAudioInputAllowed(pid, uid) && !canCaptureOutput) { return PERMISSION_DENIED; return PERMISSION_DENIED; } } Loading Loading
media/libmediaplayerservice/MediaRecorderClient.cpp +2 −1 Original line number Original line Diff line number Diff line Loading @@ -127,7 +127,8 @@ status_t MediaRecorderClient::setAudioSource(int as) pid_t pid = IPCThreadState::self()->getCallingPid(); pid_t pid = IPCThreadState::self()->getCallingPid(); uid_t uid = IPCThreadState::self()->getCallingUid(); uid_t uid = IPCThreadState::self()->getCallingUid(); if ((as == AUDIO_SOURCE_FM_TUNER && !captureAudioOutputAllowed(pid, uid)) if ((as == AUDIO_SOURCE_FM_TUNER && !(captureAudioOutputAllowed(pid, uid) || captureTunerAudioInputAllowed(pid, uid))) || !recordingAllowed(String16(""), pid, uid)) { || !recordingAllowed(String16(""), pid, uid)) { return PERMISSION_DENIED; return PERMISSION_DENIED; } } Loading
media/utils/ServiceUtilities.cpp +8 −0 Original line number Original line Diff line number Diff line Loading @@ -164,6 +164,14 @@ bool captureMediaOutputAllowed(pid_t pid, uid_t uid) { return ok; return ok; } } bool captureTunerAudioInputAllowed(pid_t pid, uid_t uid) { if (isAudioServerOrRootUid(uid)) return true; static const String16 sCaptureTunerAudioInput("android.permission.CAPTURE_TUNER_AUDIO_INPUT"); bool ok = PermissionCache::checkPermission(sCaptureTunerAudioInput, pid, uid); if (!ok) ALOGV("Request requires android.permission.CAPTURE_TUNER_AUDIO_INPUT"); return ok; } bool captureVoiceCommunicationOutputAllowed(pid_t pid, uid_t uid) { bool captureVoiceCommunicationOutputAllowed(pid_t pid, uid_t uid) { if (isAudioServerOrRootUid(uid)) return true; if (isAudioServerOrRootUid(uid)) return true; static const String16 sCaptureVoiceCommOutput( static const String16 sCaptureVoiceCommOutput( Loading
media/utils/include/mediautils/ServiceUtilities.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -84,6 +84,7 @@ bool startRecording(const String16& opPackageName, pid_t pid, uid_t uid, audio_s void finishRecording(const String16& opPackageName, uid_t uid, audio_source_t source); void finishRecording(const String16& opPackageName, uid_t uid, audio_source_t source); bool captureAudioOutputAllowed(pid_t pid, uid_t uid); bool captureAudioOutputAllowed(pid_t pid, uid_t uid); bool captureMediaOutputAllowed(pid_t pid, uid_t uid); bool captureMediaOutputAllowed(pid_t pid, uid_t uid); bool captureTunerAudioInputAllowed(pid_t pid, uid_t uid); bool captureVoiceCommunicationOutputAllowed(pid_t pid, uid_t uid); bool captureVoiceCommunicationOutputAllowed(pid_t pid, uid_t uid); bool captureHotwordAllowed(const String16& opPackageName, pid_t pid, uid_t uid); bool captureHotwordAllowed(const String16& opPackageName, pid_t pid, uid_t uid); bool settingsAllowed(); bool settingsAllowed(); Loading
services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp +11 −5 Original line number Original line Diff line number Diff line Loading @@ -454,8 +454,9 @@ status_t AudioPolicyService::getInputForAttr(const audio_attributes_t *attr, } } // check calling permissions. // check calling permissions. // Capturing from FM_TUNER source is controlled by captureAudioOutputAllowed() only as this // Capturing from FM_TUNER source is controlled by captureTunerAudioInputAllowed() and // does not affect users privacy as does capturing from an actual microphone. // captureAudioOutputAllowed() (deprecated) as this does not affect users privacy // as does capturing from an actual microphone. if (!(recordingAllowed(opPackageName, pid, uid) || attr->source == AUDIO_SOURCE_FM_TUNER)) { if (!(recordingAllowed(opPackageName, pid, uid) || attr->source == AUDIO_SOURCE_FM_TUNER)) { ALOGE("%s permission denied: recording not allowed for uid %d pid %d", ALOGE("%s permission denied: recording not allowed for uid %d pid %d", __func__, uid, pid); __func__, uid, pid); Loading @@ -466,9 +467,14 @@ status_t AudioPolicyService::getInputForAttr(const audio_attributes_t *attr, if ((inputSource == AUDIO_SOURCE_VOICE_UPLINK || if ((inputSource == AUDIO_SOURCE_VOICE_UPLINK || inputSource == AUDIO_SOURCE_VOICE_DOWNLINK || inputSource == AUDIO_SOURCE_VOICE_DOWNLINK || inputSource == AUDIO_SOURCE_VOICE_CALL || inputSource == AUDIO_SOURCE_VOICE_CALL || inputSource == AUDIO_SOURCE_ECHO_REFERENCE|| inputSource == AUDIO_SOURCE_ECHO_REFERENCE) inputSource == AUDIO_SOURCE_FM_TUNER) && && !canCaptureOutput) { !canCaptureOutput) { return PERMISSION_DENIED; } if (inputSource == AUDIO_SOURCE_FM_TUNER && !captureTunerAudioInputAllowed(pid, uid) && !canCaptureOutput) { return PERMISSION_DENIED; return PERMISSION_DENIED; } } Loading