OSDN Git Service

Allow system server to bind to USB devices.
authorJeff Brown <jeffbrown@google.com>
Thu, 28 Mar 2013 10:15:40 +0000 (03:15 -0700)
committerJeff Brown <jeffbrown@google.com>
Thu, 28 Mar 2013 10:15:40 +0000 (03:15 -0700)
Change-Id: I31f9ed1ff3fcda53f62f08ae198d18d0df3321b7

services/java/com/android/server/usb/UsbSettingsManager.java

index f9aaa17..9b5b312 100644 (file)
@@ -34,6 +34,7 @@ import android.hardware.usb.UsbInterface;
 import android.hardware.usb.UsbManager;
 import android.os.Binder;
 import android.os.Environment;
+import android.os.Process;
 import android.os.UserHandle;
 import android.util.AtomicFile;
 import android.util.Log;
@@ -853,21 +854,29 @@ class UsbSettingsManager {
 
     public boolean hasPermission(UsbDevice device) {
         synchronized (mLock) {
+            int uid = Binder.getCallingUid();
+            if (uid == Process.SYSTEM_UID) {
+                return true;
+            }
             SparseBooleanArray uidList = mDevicePermissionMap.get(device.getDeviceName());
             if (uidList == null) {
                 return false;
             }
-            return uidList.get(Binder.getCallingUid());
+            return uidList.get(uid);
         }
     }
 
     public boolean hasPermission(UsbAccessory accessory) {
         synchronized (mLock) {
+            int uid = Binder.getCallingUid();
+            if (uid == Process.SYSTEM_UID) {
+                return true;
+            }
             SparseBooleanArray uidList = mAccessoryPermissionMap.get(accessory);
             if (uidList == null) {
                 return false;
             }
-            return uidList.get(Binder.getCallingUid());
+            return uidList.get(uid);
         }
     }