From b07f0599bb2fabceba715ca89b78a194ef999bba Mon Sep 17 00:00:00 2001 From: Evan Severson Date: Thu, 30 Apr 2020 17:03:48 -0700 Subject: [PATCH] Check permission for soundtrigger detection service The app which gets bound to use microphone in the background should be holding the CAPTURE_AUDIO_HOTWORD permission. Test: Verify current services still work Verify that app without permission can't be registered Bug: 155438570 Change-Id: I4b53c45bc74df4e91026e13c7e2bfa0f5461df52 --- .../server/soundtrigger/SoundTriggerService.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java index 170bee841e74a..42e2bbf088342 100644 --- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java +++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java @@ -443,6 +443,8 @@ public class SoundTriggerService extends SystemService { enforceCallingPermission(Manifest.permission.MANAGE_SOUND_TRIGGER); + enforceDetectionPermissions(detectionService); + if (!isInitialized()) return STATUS_ERROR; if (DEBUG) { Slog.i(TAG, "startRecognition(): id = " + soundModelId); @@ -1532,6 +1534,16 @@ public class SoundTriggerService extends SystemService { } } + private void enforceDetectionPermissions(ComponentName detectionService) { + PackageManager packageManager = mContext.getPackageManager(); + String packageName = detectionService.getPackageName(); + if (packageManager.checkPermission(Manifest.permission.CAPTURE_AUDIO_HOTWORD, packageName) + != PackageManager.PERMISSION_GRANTED) { + throw new SecurityException(detectionService.getPackageName() + " does not have" + + " permission " + Manifest.permission.CAPTURE_AUDIO_HOTWORD); + } + } + //================================================================= // For logging