fix client pid for effects applied by audio policy
Test: Hangouts call, Play Music with and w/o effects
Change-Id: Ia9b20f94be667dd92e0497f8ef9c0dc0e95afe28
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 0e70ad9..cf30aa9 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -2606,6 +2606,7 @@
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<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());