DO NOT MERGE Check caller for sending media key to global priority session
Prevent sending media key events from the non-system app to the global priority session through the MediaSessionManager.dispatchMediaKeyEvent(). Note that any app can use the API indirectly with the public API AudioManager.dispatchMediaKeyEvent(). Bug: 29833954 Tested: Installed malicious apps and confirmed that they don't work. Tested: Run CtsTelecomTestCases and CtsMediaTestCases Change-Id: I2a9e78196ba7455324e485f098f095d03b47ee15
This commit is contained in:
@@ -47,6 +47,7 @@ import android.os.Handler;
|
|||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
|
import android.os.Process;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ResultReceiver;
|
import android.os.ResultReceiver;
|
||||||
import android.os.ServiceManager;
|
import android.os.ServiceManager;
|
||||||
@@ -697,6 +698,14 @@ public class MediaSessionService extends SystemService implements Monitor {
|
|||||||
final int uid = Binder.getCallingUid();
|
final int uid = Binder.getCallingUid();
|
||||||
final long token = Binder.clearCallingIdentity();
|
final long token = Binder.clearCallingIdentity();
|
||||||
|
|
||||||
|
if (isGlobalPriorityActive() && uid != Process.SYSTEM_UID) {
|
||||||
|
// Prevent dispatching key event through reflection while the global priority
|
||||||
|
// session is active.
|
||||||
|
Slog.i(TAG, "Only the system can dispatch media key event "
|
||||||
|
+ "to the global priority session.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
MediaSessionRecord session = mPriorityStack
|
MediaSessionRecord session = mPriorityStack
|
||||||
|
|||||||
Reference in New Issue
Block a user