Revert "audio flinger: move record permission checks to audio policy service"

This reverts commit c7b71a1b3a16231d7741f9ef52c5f84ec8de0c31.

Bug: 72628781
Test: Capture several videos from camera app
Change-Id: If633e677d87320335e368a8340599c9e4a398201
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 113744f..baab926 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -1622,6 +1622,12 @@
         clientPid = callingPid;
     }
 
+    // check calling permissions
+    if (!recordingAllowed(input.opPackageName, input.clientInfo.clientTid, clientUid)) {
+        ALOGE("createRecord() permission denied: recording not allowed");
+        lStatus = PERMISSION_DENIED;
+        goto Exit;
+    }
     // we don't yet support anything other than linear PCM
     if (!audio_is_valid_format(input.config.format) || !audio_is_linear_pcm(input.config.format)) {
         ALOGE("createRecord() invalid format %#x", input.config.format);
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 7bfe802..3d270fc 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -7801,6 +7801,10 @@
         return NO_ERROR;
     }
 
+    if (!isOutput() && !recordingAllowed(client.packageName, client.clientPid, client.clientUid)) {
+        return PERMISSION_DENIED;
+    }
+
     audio_port_handle_t portId = AUDIO_PORT_HANDLE_NONE;
 
     audio_io_handle_t io = mId;
diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
index 306de3f..0ce562c 100644
--- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
@@ -296,7 +296,6 @@
     if (mAudioPolicyManager == NULL) {
         return NO_INIT;
     }
-
     // already checked by client, but double-check in case the client wrapper is bypassed
     if (attr->source < AUDIO_SOURCE_DEFAULT && attr->source >= AUDIO_SOURCE_CNT &&
             attr->source != AUDIO_SOURCE_HOTWORD && attr->source != AUDIO_SOURCE_FM_TUNER) {
@@ -320,13 +319,6 @@
         pid = callingPid;
     }
 
-    // check calling permissions
-    if (!recordingAllowed(opPackageName, pid, uid)) {
-        ALOGE("%s permission denied: recording not allowed for uid %d pid %d",
-                __func__, uid, pid);
-        return PERMISSION_DENIED;
-    }
-
     if ((attr->source == AUDIO_SOURCE_HOTWORD) && !captureHotwordAllowed(pid, uid)) {
         return BAD_VALUE;
     }
@@ -400,28 +392,18 @@
     if (mAudioPolicyManager == NULL) {
         return NO_INIT;
     }
-    sp<AudioRecordClient> client;
-    {
-        Mutex::Autolock _l(mLock);
 
-        ssize_t index = mAudioRecordClients.indexOfKey(portId);
-        if (index < 0) {
-            return INVALID_OPERATION;
-        }
-        client = mAudioRecordClients.valueAt(index);
-    }
+    Mutex::Autolock _l(mLock);
 
-    // check calling permissions
-    if (!recordingAllowed(client->opPackageName, client->pid, client->uid)) {
-        ALOGE("%s permission denied: recording not allowed for uid %d pid %d",
-                __func__, client->uid, client->pid);
-        return PERMISSION_DENIED;
+    ssize_t index = mAudioRecordClients.indexOfKey(portId);
+    if (index < 0) {
+        return INVALID_OPERATION;
     }
+    sp<AudioRecordClient> client = mAudioRecordClients.valueAt(index);
 
     // If UID inactive it records silence until becoming active
     *silenced = !mUidPolicy->isUidActive(client->uid) && !client->isVirtualDevice;
 
-    Mutex::Autolock _l(mLock);
     AudioPolicyInterface::concurrency_type__mask_t concurrency =
             AudioPolicyInterface::API_INPUT_CONCURRENCY_NONE;