Merge "Pass in calling UID and package to dumpstate"

am: bc6e433ae4

Change-Id: I1bf6f1053d088af55d35164207e5167c806db686
This commit is contained in:
Nandana Dutt
2019-01-19 05:59:00 -08:00
committed by android-build-merger
2 changed files with 21 additions and 7 deletions

View 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();
}

View 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) {