audioserver: return binder call permission error in reply

When a transaction to IAudioFlinger or IAudioPolicyService is detected
from an unauthorized source, return the INVALID_OPERATION status in
reply Parcel and not as transaction status.

Also removed check on SET_RINGER_MODE as it is not implemented on client
side and allow SET_MODE from system AIDs instead of just audioserver.

Bug: 78615605
Test: manual audio smoke tests.
Change-Id: Ia4fdfc22f049da69aaa9d45075e1c502eecf4521
gugelfrei
Eric Laurent 6 years ago
parent 64da222857
commit ef92bff8d2

@ -871,7 +871,6 @@ status_t BnAudioFlinger::onTransact(
switch (code) {
case SET_STREAM_VOLUME:
case SET_STREAM_MUTE:
case SET_MODE:
case OPEN_OUTPUT:
case OPEN_DUPLICATE_OUTPUT:
case CLOSE_OUTPUT:
@ -892,7 +891,15 @@ status_t BnAudioFlinger::onTransact(
case SET_RECORD_SILENCED:
ALOGW("%s: transaction %d received from PID %d",
__func__, code, IPCThreadState::self()->getCallingPid());
return INVALID_OPERATION;
// return status only for non void methods
switch (code) {
case SET_RECORD_SILENCED:
break;
default:
reply->writeInt32(static_cast<int32_t> (INVALID_OPERATION));
break;
}
return OK;
default:
break;
}
@ -909,7 +916,15 @@ status_t BnAudioFlinger::onTransact(
ALOGW("%s: transaction %d received from PID %d unauthorized UID %d",
__func__, code, IPCThreadState::self()->getCallingPid(),
IPCThreadState::self()->getCallingUid());
return INVALID_OPERATION;
// return status only for non void methods
switch (code) {
case SYSTEM_READY:
break;
default:
reply->writeInt32(static_cast<int32_t> (INVALID_OPERATION));
break;
}
return OK;
}
} break;
default:

@ -857,7 +857,16 @@ status_t BnAudioPolicyService::onTransact(
case RELEASE_SOUNDTRIGGER_SESSION:
ALOGW("%s: transaction %d received from PID %d",
__func__, code, IPCThreadState::self()->getCallingPid());
return INVALID_OPERATION;
// return status only for non void methods
switch (code) {
case RELEASE_OUTPUT:
case RELEASE_INPUT:
break;
default:
reply->writeInt32(static_cast<int32_t> (INVALID_OPERATION));
break;
}
return OK;
default:
break;
}
@ -867,7 +876,6 @@ status_t BnAudioPolicyService::onTransact(
case SET_DEVICE_CONNECTION_STATE:
case HANDLE_DEVICE_CONFIG_CHANGE:
case SET_PHONE_STATE:
case SET_RINGER_MODE:
case SET_FORCE_USE:
case INIT_STREAM_VOLUME:
case SET_STREAM_VOLUME:
@ -879,7 +887,8 @@ status_t BnAudioPolicyService::onTransact(
ALOGW("%s: transaction %d received from PID %d unauthorized UID %d",
__func__, code, IPCThreadState::self()->getCallingPid(),
IPCThreadState::self()->getCallingUid());
return INVALID_OPERATION;
reply->writeInt32(static_cast<int32_t> (INVALID_OPERATION));
return OK;
}
} break;
default:

Loading…
Cancel
Save