Merge "Enforce guards against crash command via shell" into tm-dev
This commit is contained in:
@@ -1200,8 +1200,19 @@ final class ActivityManagerShellCommand extends ShellCommand {
|
|||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
packageName = arg;
|
packageName = arg;
|
||||||
}
|
}
|
||||||
mInterface.crashApplicationWithType(-1, pid, packageName, userId, "shell-induced crash",
|
|
||||||
false, CrashedByAdbException.TYPE_ID);
|
int[] userIds = (userId == UserHandle.USER_ALL) ? mInternal.mUserController.getUserIds()
|
||||||
|
: new int[]{userId};
|
||||||
|
for (int id : userIds) {
|
||||||
|
if (mInternal.mUserController.hasUserRestriction(
|
||||||
|
UserManager.DISALLOW_DEBUGGING_FEATURES, id)) {
|
||||||
|
getOutPrintWriter().println(
|
||||||
|
"Shell does not have permission to crash packages for user " + id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
mInterface.crashApplicationWithType(-1, pid, packageName, id, "shell-induced crash",
|
||||||
|
false, CrashedByAdbException.TYPE_ID);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import android.app.ActivityOptions;
|
|||||||
import android.app.AnrController;
|
import android.app.AnrController;
|
||||||
import android.app.ApplicationErrorReport;
|
import android.app.ApplicationErrorReport;
|
||||||
import android.app.ApplicationExitInfo;
|
import android.app.ApplicationExitInfo;
|
||||||
|
import android.app.RemoteServiceException.CrashedByAdbException;
|
||||||
import android.app.usage.UsageStatsManager;
|
import android.app.usage.UsageStatsManager;
|
||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -523,6 +524,16 @@ class AppErrors {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (exceptionTypeId == CrashedByAdbException.TYPE_ID) {
|
||||||
|
String[] packages = proc.getPackageList();
|
||||||
|
for (int i = 0; i < packages.length; i++) {
|
||||||
|
if (mService.mPackageManagerInt.isPackageStateProtected(packages[i], proc.userId)) {
|
||||||
|
Slog.w(TAG, "crashApplication: Can not crash protected package " + packages[i]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
proc.scheduleCrashLocked(message, exceptionTypeId, extras);
|
proc.scheduleCrashLocked(message, exceptionTypeId, extras);
|
||||||
if (force) {
|
if (force) {
|
||||||
// If the app is responsive, the scheduled crash will happen as expected
|
// If the app is responsive, the scheduled crash will happen as expected
|
||||||
|
|||||||
Reference in New Issue
Block a user