From e89688fcd7076f6a531ce7b91458f6c3159996bb Mon Sep 17 00:00:00 2001 From: "Philip P. Moltmann" Date: Fri, 24 May 2019 15:56:17 -0700 Subject: [PATCH] Check USB device/accessory perms with sys identity As checking the permissions might call UsbDevice/UsbAccessory.getSerial again, we have to make sure that in this code paths we run with the system's identity so that we can always resolve the serial number. Test: CtsVerifier UsbAccessory/UsbDevice test Fixes: 117606509 Change-Id: I777be10b806ab02046f99805806ae1a16ebb0203 --- .../android/server/usb/UsbSerialReader.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/services/usb/java/com/android/server/usb/UsbSerialReader.java b/services/usb/java/com/android/server/usb/UsbSerialReader.java index 32fc796e7e05f..8ca77f0c63dc4 100644 --- a/services/usb/java/com/android/server/usb/UsbSerialReader.java +++ b/services/usb/java/com/android/server/usb/UsbSerialReader.java @@ -85,22 +85,22 @@ class UsbSerialReader extends IUsbSerialReader.Stub { throw new RemoteException("package " + packageName + " cannot be found"); } packageTargetSdkVersion = pkg.applicationInfo.targetSdkVersion; - } finally { - Binder.restoreCallingIdentity(token); - } - if (packageTargetSdkVersion >= Build.VERSION_CODES.Q) { - if (mContext.checkPermission(android.Manifest.permission.MANAGE_USB, pid, uid) - == PackageManager.PERMISSION_DENIED) { - UsbUserSettingsManager settings = mSettingsManager.getSettingsForUser( - UserHandle.getUserId(uid)); + if (packageTargetSdkVersion >= Build.VERSION_CODES.Q) { + if (mContext.checkPermission(android.Manifest.permission.MANAGE_USB, pid, uid) + == PackageManager.PERMISSION_DENIED) { + UsbUserSettingsManager settings = mSettingsManager.getSettingsForUser( + UserHandle.getUserId(uid)); - if (mDevice instanceof UsbDevice) { - settings.checkPermission((UsbDevice) mDevice, packageName, uid); - } else { - settings.checkPermission((UsbAccessory) mDevice, uid); + if (mDevice instanceof UsbDevice) { + settings.checkPermission((UsbDevice) mDevice, packageName, uid); + } else { + settings.checkPermission((UsbAccessory) mDevice, uid); + } } } + } finally { + Binder.restoreCallingIdentity(token); } }