@@ -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 }
@@ -10133,19 +10136,36 @@ public void setPermissionEnforced(String permission, boolean enforced) {
1013310136
1013410137 @ Override
1013510138 public boolean isPermissionEnforced (String permission ) {
10139+ final boolean enforcedDefault = isPermissionEnforcedDefault (permission );
1013610140 synchronized (mPackages ) {
10137- return isPermissionEnforcedLocked (permission );
10141+ return isPermissionEnforcedLocked (permission , enforcedDefault );
1013810142 }
1013910143 }
1014010144
10141- private boolean isPermissionEnforcedLocked (String permission ) {
10145+ /**
10146+ * Check if given permission should be enforced by default. Should always be
10147+ * called outside of {@link #mPackages} lock.
10148+ */
10149+ private boolean isPermissionEnforcedDefault (String permission ) {
10150+ if (READ_EXTERNAL_STORAGE .equals (permission )) {
10151+ return Secure .getInt (mContext .getContentResolver (),
10152+ Secure .READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT , 0 ) != 0 ;
10153+ } else {
10154+ return true ;
10155+ }
10156+ }
10157+
10158+ /**
10159+ * Check if user has requested that given permission be enforced, using
10160+ * given default if undefined.
10161+ */
10162+ private boolean isPermissionEnforcedLocked (String permission , boolean enforcedDefault ) {
1014210163 if (READ_EXTERNAL_STORAGE .equals (permission )) {
1014310164 if (mSettings .mReadExternalStorageEnforced != null ) {
1014410165 return mSettings .mReadExternalStorageEnforced ;
1014510166 } else {
10146- // if user hasn't defined, fall back to secure default
10147- return Secure .getInt (mContext .getContentResolver (),
10148- Secure .READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT , 0 ) != 0 ;
10167+ // User hasn't defined; fall back to secure default
10168+ return enforcedDefault ;
1014910169 }
1015010170 } else {
1015110171 return true ;
0 commit comments