diff options
Diffstat (limited to 'apex/blobstore')
-rw-r--r-- | apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java b/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java index 35a2436702da..9376198b8eaf 100644 --- a/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java +++ b/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java @@ -25,6 +25,7 @@ import static android.app.blob.XmlTags.TAG_SESSIONS; import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AWARE; import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE; import static android.content.pm.PackageManager.MATCH_UNINSTALLED_PACKAGES; +import static android.os.UserHandle.USER_CURRENT; import static android.os.UserHandle.USER_NULL; import static com.android.server.blob.BlobStoreConfig.LOGV; @@ -46,6 +47,8 @@ import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; +import android.app.ActivityManager; +import android.app.ActivityManagerInternal; import android.app.blob.BlobHandle; import android.app.blob.BlobInfo; import android.app.blob.IBlobStoreManager; @@ -1378,7 +1381,14 @@ public class BlobStoreManagerService extends SystemService { + "queryBlobsForUser()"); } - return queryBlobsForUserInternal(userId); + final int resolvedUserId = userId == USER_CURRENT + ? ActivityManager.getCurrentUser() : userId; + // Don't allow any other special user ids apart from USER_CURRENT + final ActivityManagerInternal amInternal = LocalServices.getService( + ActivityManagerInternal.class); + amInternal.ensureNotSpecialUser(resolvedUserId); + + return queryBlobsForUserInternal(resolvedUserId); } @Override @@ -1479,12 +1489,13 @@ public class BlobStoreManagerService extends SystemService { private static final int FLAG_DUMP_CONFIG = 1 << 2; private int mSelectedSectionFlags; - private boolean mDumpFull; + private boolean mDumpUnredacted; private final ArrayList<String> mDumpPackages = new ArrayList<>(); private final ArrayList<Integer> mDumpUids = new ArrayList<>(); private final ArrayList<Integer> mDumpUserIds = new ArrayList<>(); private final ArrayList<Long> mDumpBlobIds = new ArrayList<>(); private boolean mDumpHelp; + private boolean mDumpAll; public boolean shouldDumpSession(String packageName, int uid, long blobId) { if (!CollectionUtils.isEmpty(mDumpPackages) @@ -1503,7 +1514,7 @@ public class BlobStoreManagerService extends SystemService { } public boolean shouldDumpAllSections() { - return mSelectedSectionFlags == 0; + return mDumpAll || (mSelectedSectionFlags == 0); } public void allowDumpSessions() { @@ -1545,7 +1556,7 @@ public class BlobStoreManagerService extends SystemService { } public boolean shouldDumpFull() { - return mDumpFull; + return mDumpUnredacted; } public boolean shouldDumpUser(int userId) { @@ -1567,10 +1578,12 @@ public class BlobStoreManagerService extends SystemService { for (int i = 0; i < args.length; ++i) { final String opt = args[i]; - if ("--full".equals(opt) || "-f".equals(opt)) { + if ("--all".equals(opt) || "-a".equals(opt)) { + dumpArgs.mDumpAll = true; + } else if ("--unredacted".equals(opt) || "-u".equals(opt)) { final int callingUid = Binder.getCallingUid(); if (callingUid == Process.SHELL_UID || callingUid == Process.ROOT_UID) { - dumpArgs.mDumpFull = true; + dumpArgs.mDumpUnredacted = true; } } else if ("--sessions".equals(opt)) { dumpArgs.allowDumpSessions(); @@ -1580,7 +1593,7 @@ public class BlobStoreManagerService extends SystemService { dumpArgs.allowDumpConfig(); } else if ("--package".equals(opt) || "-p".equals(opt)) { dumpArgs.mDumpPackages.add(getStringArgRequired(args, ++i, "packageName")); - } else if ("--uid".equals(opt) || "-u".equals(opt)) { + } else if ("--uid".equals(opt)) { dumpArgs.mDumpUids.add(getIntArgRequired(args, ++i, "uid")); } else if ("--user".equals(opt)) { dumpArgs.mDumpUserIds.add(getIntArgRequired(args, ++i, "userId")); |