From ee2f7df9ee8a4f43c3b0858bad08a4f0a59a627f Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Thu, 26 Sep 2013 11:32:30 -0700 Subject: Tighten flags enforcement, API to test Uris. Check and throw if callers request invalid grant flags. Add API to test if a Uri is backend by a DocumentsProvider. Bug: 10919391, 10935608 Change-Id: Ifa6afefb95983558c8c64dc15ddf650e9fe07080 --- .../android/server/am/ActivityManagerService.java | 23 +++++++--------------- .../java/com/android/server/am/UriPermission.java | 6 ++---- 2 files changed, 9 insertions(+), 20 deletions(-) (limited to 'services/java') diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 3c11933..babe0e6 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -41,6 +41,7 @@ import com.android.internal.os.TransferPipe; import com.android.internal.util.FastPrintWriter; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.MemInfoReader; +import com.android.internal.util.Preconditions; import com.android.server.AppOpsService; import com.android.server.AttributeCache; import com.android.server.IntentResolver; @@ -6062,12 +6063,8 @@ public final class ActivityManagerService extends ActivityManagerNative } // Persistable only supported through Intents - modeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION - | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); - if (modeFlags == 0) { - throw new IllegalArgumentException("Mode flags must be " - + "FLAG_GRANT_READ_URI_PERMISSION and/or FLAG_GRANT_WRITE_URI_PERMISSION"); - } + Preconditions.checkFlagsArgument(modeFlags, + Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); grantUriPermissionLocked(r.uid, targetPkg, uri, modeFlags, null); @@ -6408,11 +6405,8 @@ public final class ActivityManagerService extends ActivityManagerNative public void takePersistableUriPermission(Uri uri, int modeFlags) { enforceNotIsolatedCaller("takePersistableUriPermission"); - modeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION - | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); - if (modeFlags == 0) { - return; - } + Preconditions.checkFlagsArgument(modeFlags, + Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); synchronized (this) { final int callingUid = Binder.getCallingUid(); @@ -6436,11 +6430,8 @@ public final class ActivityManagerService extends ActivityManagerNative public void releasePersistableUriPermission(Uri uri, int modeFlags) { enforceNotIsolatedCaller("releasePersistableUriPermission"); - modeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION - | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); - if (modeFlags == 0) { - return; - } + Preconditions.checkFlagsArgument(modeFlags, + Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); synchronized (this) { final int callingUid = Binder.getCallingUid(); diff --git a/services/java/com/android/server/am/UriPermission.java b/services/java/com/android/server/am/UriPermission.java index 7057c24..5868c08 100644 --- a/services/java/com/android/server/am/UriPermission.java +++ b/services/java/com/android/server/am/UriPermission.java @@ -22,6 +22,7 @@ import android.os.UserHandle; import android.util.Log; import android.util.Slog; +import com.android.internal.util.Preconditions; import com.google.android.collect.Sets; import java.io.PrintWriter; @@ -131,10 +132,7 @@ final class UriPermission { * @return if mode changes should trigger persisting. */ boolean takePersistableModes(int modeFlags) { - if ((~persistableModeFlags & modeFlags) != 0) { - Slog.w(TAG, "Trying to take 0x" + Integer.toHexString(modeFlags) + " but only 0x" - + Integer.toHexString(persistableModeFlags) + " are available"); - } + Preconditions.checkFlagsArgument(modeFlags, persistableModeFlags); final int before = persistedModeFlags; persistedModeFlags |= (persistableModeFlags & modeFlags); -- cgit v1.1