From 59ec67efa6b0941113f5a160aed00529e612d0fe Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Tue, 20 Aug 2019 15:42:04 -0700 Subject: AudioFlinger: enforce OP_RECORD_AUDIO during recording Fix issue where RecordTrack silencing didn't silence the full buffer: the memset to 0 was using the RecordThread frame size, not the RecordTrack frame size. OP_RECORD_AUDIO was only enforced at the start of a recording which would fail if not granted. This patch silences the recording (i.e. silence is recorded instead) when it is lost, and undoes that when granted again. This requires: - propagating the package name of the client to the RecordTrack class - registering an appOp callback in RecordTrack (through a new OpRecordAudioMonitor class) to (un)silence the recording - update the isSilenced() method to take into account the appOp. Bug: 138968594 Bug: 138636979 Test: run app that records audio, then "adb shell appops __pack_name__ 27 2" and verify recording is silent after that. Change-Id: Ib33f5b592185a67204997213bab1ac2594d90d37 (cherry picked from commit ddf87effa4d80f413a80fde861f73877ccd80599) Merged-In: Ib33f5b592185a67204997213bab1ac2594d90d37 (cherry picked from commit 7307293e8befafa12b244b74cd3c8cb84b27997c) --- services/audioflinger/Threads.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'services/audioflinger/Threads.h') diff --git a/services/audioflinger/Threads.h b/services/audioflinger/Threads.h index fc8aa13cbb..87bebf3d89 100644 --- a/services/audioflinger/Threads.h +++ b/services/audioflinger/Threads.h @@ -1553,7 +1553,8 @@ public: audio_input_flags_t *flags, pid_t tid, status_t *status /*non-NULL*/, - audio_port_handle_t portId); + audio_port_handle_t portId, + const String16& opPackageName); status_t start(RecordTrack* recordTrack, AudioSystem::sync_event_t event, -- cgit v1.2.3