From 29c38dc24a05b329c64bd00c9062e52bfef64b04 Mon Sep 17 00:00:00 2001 From: Atneya Nair Date: Wed, 26 Apr 2023 22:42:00 -0700 Subject: [PATCH 1/2] Prevent detached ST loggers from double cacheing Since we support double detaches as a no-op, ensure that we only add a detached STService event logger to the detached cache if it was successfully removed from the active set. Bug: 272147641 Fixes: 279855817 Test: Manual verification of dumpsys post-detach Change-Id: I127e1a2c5d2570db828ce6db35d84000848b3502 --- .../server/soundtrigger/SoundTriggerService.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java index b062e6b08e002..913535e06a214 100644 --- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java +++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java @@ -296,7 +296,10 @@ public class SoundTriggerService extends SystemService { // Helper to add session logger to the capacity limited detached list. // If we are at capacity, remove the oldest, and retry - private void addDetachedSessionLogger(EventLogger logger) { + private void detachSessionLogger(EventLogger logger) { + if (!mSessionEventLoggers.remove(logger)) { + return; + } // Attempt to push to the top of the queue while (!mDetachedSessionEventLoggers.offerFirst(logger)) { // Remove the oldest element, if one still exists @@ -872,8 +875,7 @@ public class SoundTriggerService extends SystemService { private void detach() { mSoundTriggerHelper.detach(); - mSessionEventLoggers.remove(mEventLogger); - addDetachedSessionLogger(mEventLogger); + detachSessionLogger(mEventLogger); } private void enforceCallingPermission(String permission) { @@ -1659,8 +1661,7 @@ public class SoundTriggerService extends SystemService { private void detachInternal() { mEventLogger.enqueue(new SessionEvent(Type.DETACH, null)); - mSessionEventLoggers.remove(mEventLogger); - addDetachedSessionLogger(mEventLogger); + detachSessionLogger(mEventLogger); mSoundTriggerHelper.detach(); } } From 87a4ad07d2c8d8088e78e8770bae3a3130625d14 Mon Sep 17 00:00:00 2001 From: Atneya Nair Date: Wed, 26 Apr 2023 19:14:29 -0700 Subject: [PATCH 2/2] Remove RECORD_AUDIO requirement for ST listModules No reason to require RECORD pre-flight permissions to query dsp module properties. CAPTURE_AUDIO_HOTWORD, which is a non-runtime permission, should suffice to ensure only valid ST clients can call this method. We will still require RECORD for the rest of the methods, which actually begin to interact with the hardware. Bug: 272147641 Fixes: 279839210 Test: SoundTriggerManagerTest Change-Id: Ibf61fe8f26169dff754dbd40f385793b325707de --- .../SoundTriggerMiddlewarePermission.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission.java b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission.java index 13fe14caa1f99..00cedd77414e6 100644 --- a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission.java +++ b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission.java @@ -78,7 +78,7 @@ public class SoundTriggerMiddlewarePermission implements ISoundTriggerMiddleware public @NonNull SoundTriggerModuleDescriptor[] listModules() { Identity identity = getIdentity(); - enforcePermissionsForPreflight(identity); + enforcePermissionForPreflight(mContext, identity, CAPTURE_AUDIO_HOTWORD); return mDelegate.listModules(); }