OSDN Git Service

Pass in calling UID and package to dumpstate
authorNandana Dutt <nandana@google.com>
Wed, 16 Jan 2019 18:18:38 +0000 (18:18 +0000)
committerNandana Dutt <nandana@google.com>
Thu, 17 Jan 2019 16:15:27 +0000 (16:15 +0000)
BUG: 111441001
Test: builds
Change-Id: Ib623f6d4f50b81f331131cf3fda92fe2526dd6c7

core/java/android/os/BugreportManager.java
services/core/java/com/android/server/os/BugreportManagerServiceImpl.java

index cbb3909..c5a51f1 100644 (file)
@@ -66,10 +66,14 @@ public class BugreportManager {
         @interface BugreportErrorCode {}
 
         /** The input options were invalid */
-        int BUGREPORT_ERROR_INVALID_INPUT = 1;
+        int BUGREPORT_ERROR_INVALID_INPUT = IDumpstateListener.BUGREPORT_ERROR_INVALID_INPUT;
 
         /** A runtime error occured */
-        int BUGREPORT_ERROR_RUNTIME = 2;
+        int BUGREPORT_ERROR_RUNTIME = IDumpstateListener.BUGREPORT_ERROR_RUNTIME_ERROR;
+
+        /** User denied consent to share the bugreport */
+        int BUGREPORT_ERROR_USER_DENIED_CONSENT =
+                IDumpstateListener.BUGREPORT_ERROR_USER_DENIED_CONSENT;
 
         /**
          * Called when taking bugreport resulted in an error.
@@ -108,7 +112,10 @@ public class BugreportManager {
         DumpstateListener dsListener = new DumpstateListener(listener);
 
         try {
-            mBinder.startBugreport(bugreportFd, screenshotFd, params.getMode(), dsListener);
+            // Note: mBinder can get callingUid from the binder transaction.
+            mBinder.startBugreport(-1 /* callingUid */,
+                    mContext.getOpPackageName(), bugreportFd, screenshotFd,
+                    params.getMode(), dsListener);
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
index faa4714..1178cc1 100644 (file)
@@ -17,7 +17,9 @@
 package com.android.server.os;
 
 import android.annotation.RequiresPermission;
+import android.app.AppOpsManager;
 import android.content.Context;
+import android.os.Binder;
 import android.os.BugreportParams;
 import android.os.IDumpstate;
 import android.os.IDumpstateListener;
@@ -46,9 +48,11 @@ class BugreportManagerServiceImpl extends IDumpstate.Stub {
 
     private IDumpstate mDs = null;
     private final Context mContext;
+    private final AppOpsManager mAppOps;
 
     BugreportManagerServiceImpl(Context context) {
         mContext = context;
+        mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
     }
 
     @Override
@@ -60,21 +64,24 @@ class BugreportManagerServiceImpl extends IDumpstate.Stub {
         throw new UnsupportedOperationException("setListener is not allowed on this service");
     }
 
-
     @Override
     @RequiresPermission(android.Manifest.permission.DUMP)
-    public void startBugreport(FileDescriptor bugreportFd, FileDescriptor screenshotFd,
+    public void startBugreport(int callingUidUnused, String callingPackage,
+            FileDescriptor bugreportFd, FileDescriptor screenshotFd,
             int bugreportMode, IDumpstateListener listener) throws RemoteException {
-
+        int callingUid = Binder.getCallingUid();
+        // TODO(b/111441001): validate all arguments & ensure primary user
         validate(bugreportMode);
 
+        mAppOps.checkPackage(callingUid, callingPackage);
         mDs = getDumpstateService();
         if (mDs == null) {
             Slog.w(TAG, "Unable to get bugreport service");
             // TODO(b/111441001): pass error on listener
             return;
         }
-        mDs.startBugreport(bugreportFd, screenshotFd, bugreportMode, listener);
+        mDs.startBugreport(callingUid, callingPackage,
+                bugreportFd, screenshotFd, bugreportMode, listener);
     }
 
     private boolean validate(@BugreportParams.BugreportMode int mode) {