Merge "Make 4 PackageManagerService APIs lock-free" into sc-dev
This commit is contained in:
@@ -2153,6 +2153,10 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
void enforceCrossUserPermission(int callingUid, @UserIdInt int userId,
|
void enforceCrossUserPermission(int callingUid, @UserIdInt int userId,
|
||||||
boolean requireFullPermission, boolean checkShell,
|
boolean requireFullPermission, boolean checkShell,
|
||||||
boolean requirePermissionWhenSameUser, String message);
|
boolean requirePermissionWhenSameUser, String message);
|
||||||
|
SigningDetails getSigningDetails(@NonNull String packageName);
|
||||||
|
SigningDetails getSigningDetails(int uid);
|
||||||
|
boolean filterAppAccess(AndroidPackage pkg, int callingUid, int userId);
|
||||||
|
boolean filterAppAccess(String packageName, int callingUid, int userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4578,6 +4582,40 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
throw new SecurityException(errorMessage);
|
throw new SecurityException(errorMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SigningDetails getSigningDetails(@NonNull String packageName) {
|
||||||
|
AndroidPackage p = mPackages.get(packageName);
|
||||||
|
if (p == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return p.getSigningDetails();
|
||||||
|
}
|
||||||
|
|
||||||
|
public SigningDetails getSigningDetails(int uid) {
|
||||||
|
final int appId = UserHandle.getAppId(uid);
|
||||||
|
final Object obj = mSettings.getSettingLPr(appId);
|
||||||
|
if (obj != null) {
|
||||||
|
if (obj instanceof SharedUserSetting) {
|
||||||
|
return ((SharedUserSetting) obj).signatures.mSigningDetails;
|
||||||
|
} else if (obj instanceof PackageSetting) {
|
||||||
|
final PackageSetting ps = (PackageSetting) obj;
|
||||||
|
return ps.signatures.mSigningDetails;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return SigningDetails.UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean filterAppAccess(AndroidPackage pkg, int callingUid, int userId) {
|
||||||
|
PackageSetting ps = getPackageSetting(pkg.getPackageName());
|
||||||
|
return shouldFilterApplicationLocked(ps, callingUid,
|
||||||
|
userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean filterAppAccess(String packageName, int callingUid, int userId) {
|
||||||
|
PackageSetting ps = getPackageSetting(packageName);
|
||||||
|
return shouldFilterApplicationLocked(ps, callingUid,
|
||||||
|
userId);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4728,6 +4766,26 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
return super.getPackageUidInternal(packageName, flags, userId, callingUid);
|
return super.getPackageUidInternal(packageName, flags, userId, callingUid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public SigningDetails getSigningDetails(@NonNull String packageName) {
|
||||||
|
synchronized (mLock) {
|
||||||
|
return super.getSigningDetails(packageName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public SigningDetails getSigningDetails(int uid) {
|
||||||
|
synchronized (mLock) {
|
||||||
|
return super.getSigningDetails(uid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public boolean filterAppAccess(AndroidPackage pkg, int callingUid, int userId) {
|
||||||
|
synchronized (mLock) {
|
||||||
|
return super.filterAppAccess(pkg, callingUid, userId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public boolean filterAppAccess(String packageName, int callingUid, int userId) {
|
||||||
|
synchronized (mLock) {
|
||||||
|
return super.filterAppAccess(packageName, callingUid, userId);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -26560,6 +26618,22 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
return snapshotComputer().getPackage(uid);
|
return snapshotComputer().getPackage(uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private SigningDetails getSigningDetails(@NonNull String packageName) {
|
||||||
|
return snapshotComputer().getSigningDetails(packageName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private SigningDetails getSigningDetails(int uid) {
|
||||||
|
return snapshotComputer().getSigningDetails(uid);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean filterAppAccess(AndroidPackage pkg, int callingUid, int userId) {
|
||||||
|
return snapshotComputer().filterAppAccess(pkg, callingUid, userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean filterAppAccess(String packageName, int callingUid, int userId) {
|
||||||
|
return snapshotComputer().filterAppAccess(packageName, callingUid, userId);
|
||||||
|
}
|
||||||
|
|
||||||
private class PackageManagerInternalImpl extends PackageManagerInternal {
|
private class PackageManagerInternalImpl extends PackageManagerInternal {
|
||||||
@Override
|
@Override
|
||||||
public List<ApplicationInfo> getInstalledApplications(int flags, int userId,
|
public List<ApplicationInfo> getInstalledApplications(int flags, int userId,
|
||||||
@@ -26615,29 +26689,11 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
}
|
}
|
||||||
|
|
||||||
private SigningDetails getSigningDetails(@NonNull String packageName) {
|
private SigningDetails getSigningDetails(@NonNull String packageName) {
|
||||||
synchronized (mLock) {
|
return PackageManagerService.this.getSigningDetails(packageName);
|
||||||
AndroidPackage p = mPackages.get(packageName);
|
|
||||||
if (p == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return p.getSigningDetails();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private SigningDetails getSigningDetails(int uid) {
|
private SigningDetails getSigningDetails(int uid) {
|
||||||
synchronized (mLock) {
|
return PackageManagerService.this.getSigningDetails(uid);
|
||||||
final int appId = UserHandle.getAppId(uid);
|
|
||||||
final Object obj = mSettings.getSettingLPr(appId);
|
|
||||||
if (obj != null) {
|
|
||||||
if (obj instanceof SharedUserSetting) {
|
|
||||||
return ((SharedUserSetting) obj).signatures.mSigningDetails;
|
|
||||||
} else if (obj instanceof PackageSetting) {
|
|
||||||
final PackageSetting ps = (PackageSetting) obj;
|
|
||||||
return ps.signatures.mSigningDetails;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return SigningDetails.UNKNOWN;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -26652,20 +26708,12 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean filterAppAccess(AndroidPackage pkg, int callingUid, int userId) {
|
public boolean filterAppAccess(AndroidPackage pkg, int callingUid, int userId) {
|
||||||
synchronized (mLock) {
|
return PackageManagerService.this.filterAppAccess(pkg, callingUid, userId);
|
||||||
PackageSetting ps = getPackageSetting(pkg.getPackageName());
|
|
||||||
return PackageManagerService.this.shouldFilterApplicationLocked(ps, callingUid,
|
|
||||||
userId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean filterAppAccess(String packageName, int callingUid, int userId) {
|
public boolean filterAppAccess(String packageName, int callingUid, int userId) {
|
||||||
synchronized (mLock) {
|
return PackageManagerService.this.filterAppAccess(packageName, callingUid, userId);
|
||||||
PackageSetting ps = getPackageSetting(packageName);
|
|
||||||
return PackageManagerService.this.shouldFilterApplicationLocked(ps, callingUid,
|
|
||||||
userId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user