Skip to content

Commit 5a37088

Browse files
jsharkeyAndroid (Google) Code Review
authored andcommitted
Merge "Check READ_EXTERNAL enforcement outside of lock." into jb-mr1-dev
2 parents 11820f7 + c50f31d commit 5a37088

File tree

1 file changed

+28
-8
lines changed

1 file changed

+28
-8
lines changed

services/java/com/android/server/pm/PackageManagerService.java

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)