@@ -1715,6 +1715,7 @@ public int getPackageUid(String packageName, int userId) {
17151715 }
17161716
17171717 public int [] getPackageGids (String packageName ) {
1718+ final boolean enforcedDefault = isPermissionEnforcedDefault (READ_EXTERNAL_STORAGE );
17181719 // reader
17191720 synchronized (mPackages ) {
17201721 PackageParser .Package p = mPackages .get (packageName );
@@ -1726,7 +1727,7 @@ public int[] getPackageGids(String packageName) {
17261727 int [] gids = suid != null ? suid .gids : ps .gids ;
17271728
17281729 // include GIDs for any unenforced permissions
1729- if (!isPermissionEnforcedLocked (READ_EXTERNAL_STORAGE )) {
1730+ if (!isPermissionEnforcedLocked (READ_EXTERNAL_STORAGE , enforcedDefault )) {
17301731 final BasePermission basePerm = mSettings .mPermissions .get (
17311732 READ_EXTERNAL_STORAGE );
17321733 gids = appendInts (gids , basePerm .gids );
@@ -2054,6 +2055,7 @@ private void checkValidCaller(int uid, int userId) {
20542055 }
20552056
20562057 public int checkPermission (String permName , String pkgName ) {
2058+ final boolean enforcedDefault = isPermissionEnforcedDefault (permName );
20572059 synchronized (mPackages ) {
20582060 PackageParser .Package p = mPackages .get (pkgName );
20592061 if (p != null && p .mExtras != null ) {
@@ -2066,14 +2068,15 @@ public int checkPermission(String permName, String pkgName) {
20662068 return PackageManager .PERMISSION_GRANTED ;
20672069 }
20682070 }
2069- if (!isPermissionEnforcedLocked (permName )) {
2071+ if (!isPermissionEnforcedLocked (permName , enforcedDefault )) {
20702072 return PackageManager .PERMISSION_GRANTED ;
20712073 }
20722074 }
20732075 return PackageManager .PERMISSION_DENIED ;
20742076 }
20752077
20762078 public int checkUidPermission (String permName , int uid ) {
2079+ final boolean enforcedDefault = isPermissionEnforcedDefault (permName );
20772080 synchronized (mPackages ) {
20782081 Object obj = mSettings .getUserIdLPr (UserHandle .getAppId (uid ));
20792082 if (obj != null ) {
@@ -2087,7 +2090,7 @@ public int checkUidPermission(String permName, int uid) {
20872090 return PackageManager .PERMISSION_GRANTED ;
20882091 }
20892092 }
2090- if (!isPermissionEnforcedLocked (permName )) {
2093+ if (!isPermissionEnforcedLocked (permName , enforcedDefault )) {
20912094 return PackageManager .PERMISSION_GRANTED ;
20922095 }
20932096 }
@@ -10124,19 +10127,36 @@ public void setPermissionEnforced(String permission, boolean enforced) {
1012410127
1012510128 @ Override
1012610129 public boolean isPermissionEnforced (String permission ) {
10130+ final boolean enforcedDefault = isPermissionEnforcedDefault (permission );
1012710131 synchronized (mPackages ) {
10128- return isPermissionEnforcedLocked (permission );
10132+ return isPermissionEnforcedLocked (permission , enforcedDefault );
1012910133 }
1013010134 }
1013110135
10132- private boolean isPermissionEnforcedLocked (String permission ) {
10136+ /**
10137+ * Check if given permission should be enforced by default. Should always be
10138+ * called outside of {@link #mPackages} lock.
10139+ */
10140+ private boolean isPermissionEnforcedDefault (String permission ) {
10141+ if (READ_EXTERNAL_STORAGE .equals (permission )) {
10142+ return Secure .getInt (mContext .getContentResolver (),
10143+ Secure .READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT , 0 ) != 0 ;
10144+ } else {
10145+ return true ;
10146+ }
10147+ }
10148+
10149+ /**
10150+ * Check if user has requested that given permission be enforced, using
10151+ * given default if undefined.
10152+ */
10153+ private boolean isPermissionEnforcedLocked (String permission , boolean enforcedDefault ) {
1013310154 if (READ_EXTERNAL_STORAGE .equals (permission )) {
1013410155 if (mSettings .mReadExternalStorageEnforced != null ) {
1013510156 return mSettings .mReadExternalStorageEnforced ;
1013610157 } else {
10137- // if user hasn't defined, fall back to secure default
10138- return Secure .getInt (mContext .getContentResolver (),
10139- Secure .READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT , 0 ) != 0 ;
10158+ // User hasn't defined; fall back to secure default
10159+ return enforcedDefault ;
1014010160 }
1014110161 } else {
1014210162 return true ;
0 commit comments