diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/app/ActivityManager.java | 20 | ||||
| -rw-r--r-- | core/java/android/app/ContextImpl.java | 64 | ||||
| -rw-r--r-- | core/java/android/app/IActivityManager.aidl | 1 | ||||
| -rw-r--r-- | core/java/android/content/pm/IPackageManager.aidl | 1 | ||||
| -rw-r--r-- | core/java/android/permission/PermissionManager.java | 122 | ||||
| -rw-r--r-- | core/java/android/provider/Settings.java | 10 |
6 files changed, 27 insertions, 191 deletions
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index a36b167004f8..17368b789645 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -64,7 +64,6 @@ import android.os.ServiceManager; import android.os.SystemProperties; import android.os.UserHandle; import android.os.WorkSource; -import android.permission.PermissionManager; import android.util.ArrayMap; import android.util.DisplayMetrics; import android.util.Singleton; @@ -3739,7 +3738,6 @@ public class ActivityManager { } // Isolated processes don't get any permissions. if (UserHandle.isIsolated(uid)) { - PermissionManager.addPermissionDenialHint("uid " + uid + " is isolated"); return PackageManager.PERMISSION_DENIED; } // If there is a uid that owns whatever is being accessed, it has @@ -3755,26 +3753,24 @@ public class ActivityManager { Slog.w(TAG, "Permission denied: checkComponentPermission() owningUid=" + owningUid, here); */ - PermissionManager.addPermissionDenialHint( - "Target is not exported. owningUid=" + owningUid); return PackageManager.PERMISSION_DENIED; } if (permission == null) { return PackageManager.PERMISSION_GRANTED; } - return checkUidPermission(permission, uid); + try { + return AppGlobals.getPackageManager() + .checkUidPermission(permission, uid); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } } /** @hide */ public static int checkUidPermission(String permission, int uid) { try { - List<String> hints = PermissionManager.getPermissionDenialHints(); - if (hints == null) { - return AppGlobals.getPackageManager().checkUidPermission(permission, uid); - } else { - return AppGlobals.getPackageManager() - .checkUidPermissionWithDenialHintForwarding(permission, uid, hints); - } + return AppGlobals.getPackageManager() + .checkUidPermission(permission, uid); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index 931e3553c2b6..41a4fba0434c 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -68,7 +68,6 @@ import android.os.Trace; import android.os.UserHandle; import android.os.UserManager; import android.os.storage.StorageManager; -import android.permission.PermissionManager; import android.system.ErrnoException; import android.system.Os; import android.system.OsConstants; @@ -99,7 +98,6 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.nio.ByteOrder; import java.util.ArrayList; -import java.util.List; import java.util.Objects; import java.util.concurrent.Executor; @@ -1830,17 +1828,11 @@ class ContextImpl extends Context { } Slog.w(TAG, "Missing ActivityManager; assuming " + uid + " does not hold " + permission); - PermissionManager.addPermissionDenialHint("Missing ActivityManager"); return PackageManager.PERMISSION_DENIED; } try { - List<String> hints = PermissionManager.getPermissionDenialHints(); - if (hints == null) { - return am.checkPermission(permission, pid, uid); - } else { - return am.checkPermissionWithDenialHintForwarding(permission, pid, uid, hints); - } + return am.checkPermission(permission, pid, uid); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -1897,61 +1889,43 @@ class ContextImpl extends Context { String permission, int resultOfCheck, boolean selfToo, int uid, String message) { if (resultOfCheck != PackageManager.PERMISSION_GRANTED) { - List<String> hints = PermissionManager.getPermissionDenialHints(); throw new SecurityException( (message != null ? (message + ": ") : "") + (selfToo ? "Neither user " + uid + " nor current process has " - : "uid " + uid + " does not have ") - + permission + "." - + (hints == null ? "" : " Hints: " + hints)); + : "uid " + uid + " does not have ") + + permission + + "."); } } @Override public void enforcePermission( String permission, int pid, int uid, String message) { - List<String> prev = PermissionManager.collectPermissionDenialHints(this, uid); - try { - enforce(permission, - checkPermission(permission, pid, uid), - false, - uid, - message); - } finally { - PermissionManager.resetPermissionDenialHints(prev); - } + enforce(permission, + checkPermission(permission, pid, uid), + false, + uid, + message); } @Override public void enforceCallingPermission(String permission, String message) { - List<String> prev = PermissionManager.collectPermissionDenialHints(this, - Binder.getCallingUid()); - try { - enforce(permission, - checkCallingPermission(permission), - false, - Binder.getCallingUid(), - message); - } finally { - PermissionManager.resetPermissionDenialHints(prev); - } + enforce(permission, + checkCallingPermission(permission), + false, + Binder.getCallingUid(), + message); } @Override public void enforceCallingOrSelfPermission( String permission, String message) { - List<String> prev = PermissionManager.collectPermissionDenialHints(this, - Binder.getCallingUid()); - try { - enforce(permission, - checkCallingOrSelfPermission(permission), - true, - Binder.getCallingUid(), - message); - } finally { - PermissionManager.resetPermissionDenialHints(prev); - } + enforce(permission, + checkCallingOrSelfPermission(permission), + true, + Binder.getCallingUid(), + message); } @Override diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl index f82536f65ddb..48ca71690a1b 100644 --- a/core/java/android/app/IActivityManager.aidl +++ b/core/java/android/app/IActivityManager.aidl @@ -194,7 +194,6 @@ interface IActivityManager { int getProcessLimit(); @UnsupportedAppUsage int checkPermission(in String permission, int pid, int uid); - int checkPermissionWithDenialHintForwarding(in String permission, int pid, int uid, inout List<String> permissionDenialHints); int checkUriPermission(in Uri uri, int pid, int uid, int mode, int userId, in IBinder callerToken); void grantUriPermission(in IApplicationThread caller, in String targetPkg, in Uri uri, diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index 225eec13d6eb..6ab4657d727d 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -108,7 +108,6 @@ interface IPackageManager { @UnsupportedAppUsage int checkPermission(String permName, String pkgName, int userId); - int checkUidPermissionWithDenialHintForwarding(String permName, int uid, inout List<String> permissionDenialHints); int checkUidPermission(String permName, int uid); @UnsupportedAppUsage diff --git a/core/java/android/permission/PermissionManager.java b/core/java/android/permission/PermissionManager.java index 55bb3fe1817c..2a41c2065c46 100644 --- a/core/java/android/permission/PermissionManager.java +++ b/core/java/android/permission/PermissionManager.java @@ -19,22 +19,15 @@ package android.permission; import android.Manifest; import android.annotation.IntRange; import android.annotation.NonNull; -import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.SystemService; import android.annotation.TestApi; -import android.content.ContentResolver; import android.content.Context; import android.content.pm.IPackageManager; -import android.content.pm.PackageManager; -import android.os.Build; import android.os.RemoteException; -import android.provider.Settings; -import android.util.Log; import com.android.internal.annotations.Immutable; -import com.android.internal.util.ArrayUtils; import com.android.server.SystemConfig; import java.util.ArrayList; @@ -49,8 +42,6 @@ import java.util.Objects; @SystemApi @SystemService(Context.PERMISSION_SERVICE) public final class PermissionManager { - private static final String LOG_TAG = PermissionManager.class.getSimpleName(); - /** * {@link android.content.pm.PackageParser} needs access without having a {@link Context}. * @@ -63,119 +54,6 @@ public final class PermissionManager { private final IPackageManager mPackageManager; - /** Permission denials added via {@link addPermissionDenial} */ - private static final ThreadLocal<List<String>> sPermissionDenialHints = new ThreadLocal<>(); - - /** - * Report a hint that might explain why a permission check returned - * {@link PackageManager#PERMISSION_DENIED}. - * - * <p>Hints are only collected if enabled via {@link collectPermissionDenialHints} or - * when a non-null value was passed to {@link resetPermissionDenialHints} - * - * @param hint A description of the reason - * - * @hide - */ - public static void addPermissionDenialHint(@NonNull String hint) { - List<String> hints = sPermissionDenialHints.get(); - if (hints == null) { - return; - } - - hints.add(hint); - } - - /** - * @return hints added via {@link #addPermissionDenialHint(String)} on this thread before. - * - * @hide - */ - public static @Nullable List<String> getPermissionDenialHints() { - if (Build.IS_USER) { - return null; - } - - return sPermissionDenialHints.get(); - } - - /** - * Reset the permission denial hints for this thread. - * - * @param initial The initial values. If not null, enabled collection on this thread. - * - * @return the previously collected hints - * - * @hide - */ - public static @Nullable List<String> resetPermissionDenialHints( - @Nullable List<String> initial) { - List<String> prev = getPermissionDenialHints(); - if (initial == null) { - sPermissionDenialHints.remove(); - } else { - sPermissionDenialHints.set(initial); - } - return prev; - } - - /** - * Enable permission denial hint collection if package is in - * {@link Settings.Secure.DEBUG_PACKAGE_PERMISSION_CHECK} - * - * @param context A context to use - * @param uid The uid the permission check is for. - * - * @return the previously collected hints - * - * @hide - */ - public static @Nullable List<String> collectPermissionDenialHints(@NonNull Context context, - int uid) { - List<String> prev = getPermissionDenialHints(); - - if (Build.IS_USER) { - return prev; - } - - ContentResolver cr = context.getContentResolver(); - if (cr == null) { - return prev; - } - - String debugSetting; - try { - debugSetting = Settings.Secure.getString(cr, - Settings.Secure.DEBUG_PACKAGE_PERMISSION_CHECK); - } catch (IllegalStateException e) { - Log.e(LOG_TAG, "Cannot access settings", e); - return prev; - } - if (debugSetting == null) { - return prev; - } - String[] debugPkgs = debugSetting.split(","); - - PackageManager pm = context.getPackageManager(); - if (pm == null) { - return prev; - } - - String[] packages = pm.getPackagesForUid(uid); - if (packages == null) { - return prev; - } - - for (String pkg : packages) { - if (ArrayUtils.contains(debugPkgs, pkg)) { - sPermissionDenialHints.set(new ArrayList<>(0)); - break; - } - } - - return prev; - } - /** * Creates a new instance. * diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index dbc62f4a12fa..7c5a1fb5f787 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -5786,16 +5786,6 @@ public final class Settings { public static final String ANDROID_ID = "android_id"; /** - * Comma separated list packages to enable collection of permission denial hints for. - * - * @hide - * - * @see android.permission.PermissionManager#collectPermissionDenialHints(Context, int) - */ - public static final String DEBUG_PACKAGE_PERMISSION_CHECK = - "debug_package_permission_check"; - - /** * @deprecated Use {@link android.provider.Settings.Global#BLUETOOTH_ON} instead */ @Deprecated |
