Merge "Enforce owner rights check to get/setMimeGroup" into sc-dev

This commit is contained in:
Jackal Guo
2021-06-21 00:51:10 +00:00
committed by Android (Google) Code Review

View File

@@ -23191,16 +23191,17 @@ public class PackageManagerService extends IPackageManager.Stub
if (UserHandle.getAppId(callingUid) == Process.SYSTEM_UID) { if (UserHandle.getAppId(callingUid) == Process.SYSTEM_UID) {
return; return;
} }
final String[] callerPackageNames = getPackagesForUid(callingUid);
if (!ArrayUtils.contains(callerPackageNames, pkg)) {
throw new SecurityException("Calling uid " + callingUid
+ " does not own package " + pkg);
}
final int callingUserId = UserHandle.getUserId(callingUid); final int callingUserId = UserHandle.getUserId(callingUid);
PackageInfo pi = getPackageInfo(pkg, 0, callingUserId); PackageInfo pi = getPackageInfo(pkg, 0, callingUserId);
if (pi == null) { if (pi == null) {
throw new IllegalArgumentException("Unknown package " + pkg + " on user " throw new IllegalArgumentException("Unknown package " + pkg + " on user "
+ callingUserId); + callingUserId);
} }
if (!UserHandle.isSameApp(pi.applicationInfo.uid, callingUid)) {
throw new SecurityException("Calling uid " + callingUid
+ " does not own package " + pkg);
}
} }
@Override @Override
@@ -27932,7 +27933,7 @@ public class PackageManagerService extends IPackageManager.Stub
@Override @Override
public List<String> getMimeGroup(String packageName, String mimeGroup) { public List<String> getMimeGroup(String packageName, String mimeGroup) {
return PackageManagerService.this.getMimeGroup(packageName, mimeGroup); return PackageManagerService.this.getMimeGroupInternal(packageName, mimeGroup);
} }
@Override @Override
@@ -28558,9 +28559,11 @@ public class PackageManagerService extends IPackageManager.Stub
@Override @Override
public void setMimeGroup(String packageName, String mimeGroup, List<String> mimeTypes) { public void setMimeGroup(String packageName, String mimeGroup, List<String> mimeTypes) {
boolean changed = mSettings.getPackageLPr(packageName) enforceOwnerRights(packageName, Binder.getCallingUid());
.setMimeGroup(mimeGroup, mimeTypes); final boolean changed;
synchronized (mLock) {
changed = mSettings.getPackageLPr(packageName).setMimeGroup(mimeGroup, mimeTypes);
}
if (changed) { if (changed) {
applyMimeGroupChanges(packageName, mimeGroup); applyMimeGroupChanges(packageName, mimeGroup);
} }
@@ -28568,7 +28571,14 @@ public class PackageManagerService extends IPackageManager.Stub
@Override @Override
public List<String> getMimeGroup(String packageName, String mimeGroup) { public List<String> getMimeGroup(String packageName, String mimeGroup) {
return mSettings.getPackageLPr(packageName).getMimeGroup(mimeGroup); enforceOwnerRights(packageName, Binder.getCallingUid());
return getMimeGroupInternal(packageName, mimeGroup);
}
private List<String> getMimeGroupInternal(String packageName, String mimeGroup) {
synchronized (mLock) {
return mSettings.getPackageLPr(packageName).getMimeGroup(mimeGroup);
}
} }
@Override @Override