Merge "Enforce guards against crash command via shell" into tm-dev

This commit is contained in:
Ayush Sharma
2022-04-29 09:46:05 +00:00
committed by Android (Google) Code Review
2 changed files with 24 additions and 2 deletions

View File

@@ -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;
} }

View File

@@ -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