Use apex name when querying privapp allowlists

Per-apex allowlists are stored based on their path, which corresponds
to the apex name and *not* the apex package name. These are the same for
AOSP targets, but for Google specific ones, the apex package name
*typically* is of the form com.google.android.* instead of com.android.*.

Test: m
Bug: 190375768
Change-Id: Iba36509285bd75db294e369088a23b73458f3a8b
This commit is contained in:
Andrei Onea
2022-03-10 11:41:21 +00:00
parent 54d7eb4497
commit 37389f61c1
3 changed files with 16 additions and 9 deletions

View File

@@ -435,15 +435,15 @@ public class SystemConfig {
}
/** Get privapp permission allowlist for an apk-in-apex. */
public ArraySet<String> getApexPrivAppPermissions(String module, String packageName) {
return mApexPrivAppPermissions.getOrDefault(module, EMPTY_PERMISSIONS)
.get(packageName);
public ArraySet<String> getApexPrivAppPermissions(String apexName, String apkPackageName) {
return mApexPrivAppPermissions.getOrDefault(apexName, EMPTY_PERMISSIONS)
.get(apkPackageName);
}
/** Get privapp permissions denylist for an apk-in-apex. */
public ArraySet<String> getApexPrivAppDenyPermissions(String module, String packageName) {
return mApexPrivAppDenyPermissions.getOrDefault(module, EMPTY_PERMISSIONS)
.get(packageName);
public ArraySet<String> getApexPrivAppDenyPermissions(String apexName, String apkPackageName) {
return mApexPrivAppDenyPermissions.getOrDefault(apexName, EMPTY_PERMISSIONS)
.get(apkPackageName);
}
public ArraySet<String> getVendorPrivAppPermissions(String packageName) {

View File

@@ -2535,8 +2535,10 @@ class PackageManagerShellCommand extends ShellCommand {
privAppPermissions = SystemConfig.getInstance()
.getSystemExtPrivAppPermissions(pkg);
} else if (isApexApp(pkg)) {
final String apexName = ApexManager.getInstance().getApexModuleNameForPackageName(
getApexPackageNameContainingPackage(pkg));
privAppPermissions = SystemConfig.getInstance()
.getApexPrivAppPermissions(getApexPackageNameContainingPackage(pkg), pkg);
.getApexPrivAppPermissions(apexName, pkg);
} else {
privAppPermissions = SystemConfig.getInstance().getPrivAppPermissions(pkg);
}
@@ -2562,8 +2564,10 @@ class PackageManagerShellCommand extends ShellCommand {
privAppPermissions = SystemConfig.getInstance()
.getSystemExtPrivAppDenyPermissions(pkg);
} else if (isApexApp(pkg)) {
final String apexName = ApexManager.getInstance().getApexModuleNameForPackageName(
getApexPackageNameContainingPackage(pkg));
privAppPermissions = SystemConfig.getInstance()
.getApexPrivAppDenyPermissions(getApexPackageNameContainingPackage(pkg), pkg);
.getApexPrivAppDenyPermissions(apexName, pkg);
} else {
privAppPermissions = SystemConfig.getInstance().getPrivAppDenyPermissions(pkg);
}

View File

@@ -3291,10 +3291,13 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
} else if (pkg.isSystemExt()) {
permissions = systemConfig.getSystemExtPrivAppPermissions(pkg.getPackageName());
} else if (containingApexPackageName != null) {
final ApexManager apexManager = ApexManager.getInstance();
final String apexName = apexManager.getApexModuleNameForPackageName(
containingApexPackageName);
final Set<String> privAppPermissions = systemConfig.getPrivAppPermissions(
pkg.getPackageName());
final Set<String> apexPermissions = systemConfig.getApexPrivAppPermissions(
containingApexPackageName, pkg.getPackageName());
apexName, pkg.getPackageName());
if (privAppPermissions != null) {
// TODO(andreionea): Remove check as soon as all apk-in-apex
// permission allowlists are migrated.