Allow update owner to access InstallConstraints APIs

An app may not have an installer of record, but could have an update
owner, the API should make it honour the update owner.

Bug: 280724094
Test: atest InstallConstraintsTest
Test: manual. Local comment out the installer name check and CTS test
sets with para.setRequestUpdateOwnership(true) and run test.

Change-Id: I4ed9c3802df581608766908d5385d5f8e1e925a8
This commit is contained in:
Joanne Chung
2023-05-09 21:33:02 +08:00
parent f3475fcf11
commit 6c28c614ef

View File

@@ -104,6 +104,7 @@ import com.android.server.SystemConfig;
import com.android.server.SystemService;
import com.android.server.SystemServiceManager;
import com.android.server.pm.parsing.PackageParser2;
import com.android.server.pm.pkg.PackageStateInternal;
import com.android.server.pm.utils.RequestThrottle;
import libcore.io.IoUtils;
@@ -1308,6 +1309,13 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
}
}
private boolean isValidForInstallConstraints(PackageStateInternal ps,
String installerPackageName) {
return TextUtils.equals(ps.getInstallSource().mInstallerPackageName, installerPackageName)
|| TextUtils.equals(ps.getInstallSource().mUpdateOwnerPackageName,
installerPackageName);
}
private CompletableFuture<InstallConstraintsResult> checkInstallConstraintsInternal(
String installerPackageName, List<String> packageNames,
InstallConstraints constraints, long timeoutMillis) {
@@ -1319,8 +1327,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
if (!PackageManagerServiceUtils.isSystemOrRootOrShell(callingUid)) {
for (var packageName : packageNames) {
var ps = snapshot.getPackageStateInternal(packageName);
if (ps == null || !TextUtils.equals(
ps.getInstallSource().mInstallerPackageName, installerPackageName)) {
if (ps == null || !isValidForInstallConstraints(ps, installerPackageName)) {
throw new SecurityException("Caller has no access to package " + packageName);
}
}