Update AttributionSource deviceIds thoroughly
PermissionChecker expects consistent deviceIds throughout the
AttributionSource chain.
Bug: 291737188
Test: atest VirtualAudioPermissionTest
Change-Id: I101a4705fc8703cf77bc8046d032bc58b3404ed5
diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
index 0c68ad1..a862037 100644
--- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
@@ -823,8 +823,8 @@
msg << "Audio recording on session " << client->session;
// check calling permissions
- if (!(startRecording(client->attributionSource, String16(msg.str().c_str()),
- client->attributes.source)
+ if (!(startRecording(client->attributionSource, client->virtualDeviceId,
+ String16(msg.str().c_str()), client->attributes.source)
|| client->attributes.source == AUDIO_SOURCE_FM_TUNER
|| client->attributes.source == AUDIO_SOURCE_REMOTE_SUBMIX
|| client->attributes.source == AUDIO_SOURCE_ECHO_REFERENCE)) {
@@ -842,7 +842,8 @@
if (client->active) {
ALOGE("Client should never be active before startInput. Uid %d port %d",
client->attributionSource.uid, portId);
- finishRecording(client->attributionSource, client->attributes.source);
+ finishRecording(client->attributionSource, client->virtualDeviceId,
+ client->attributes.source);
return binderStatusFromStatusT(INVALID_OPERATION);
}
@@ -938,7 +939,8 @@
client->active = false;
client->startTimeNs = 0;
updateUidStates_l();
- finishRecording(client->attributionSource, client->attributes.source);
+ finishRecording(client->attributionSource, client->virtualDeviceId,
+ client->attributes.source);
}
return binderStatusFromStatusT(status);
@@ -967,7 +969,7 @@
updateUidStates_l();
// finish the recording app op
- finishRecording(client->attributionSource, client->attributes.source);
+ finishRecording(client->attributionSource, client->virtualDeviceId, client->attributes.source);
AutoCallerClear acc;
return binderStatusFromStatusT(mAudioPolicyManager->stopInput(portId));
}