From 03b74909efb0f613b9b3eaca698c55c6f7a163f8 Mon Sep 17 00:00:00 2001 From: wangmingming1 Date: Tue, 21 Nov 2017 17:29:38 +0800 Subject: Prevent system app upgrading from multi-arch to single-arch We should not let user to manully upgrade a system app which supports multi-arch to a newer version which supports only one cpu abi. Take webview as an example, if the user upgraded the webview to a version supports only armeabi-v7a on Nexus 5X by mistake, then any app supports only arm64-v8a and uses webview to display web contents would not work properly then as loading a 32bit native lib inside a 64bit mode process is not allowed. Test: Manual Change-Id: I567be7707fc18421ff686c1e8b1110dec517e06d Signed-off-by: wangmingming1 --- .../core/java/com/android/server/pm/PackageManagerService.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 7f5beff6341c..21955874c029 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -17225,6 +17225,15 @@ public class PackageManagerService extends IPackageManager.Stub return; } + // check if the new package supports all of the abis which the old package supports + boolean oldPkgSupportMultiArch = oldPackage.applicationInfo.secondaryCpuAbi != null; + boolean newPkgSupportMultiArch = pkg.applicationInfo.secondaryCpuAbi != null; + if (isSystemApp(oldPackage) && oldPkgSupportMultiArch && !newPkgSupportMultiArch) { + res.setError(INSTALL_FAILED_UPDATE_INCOMPATIBLE, + "Update to package " + pkgName + " doesn't support multi arch"); + return; + } + // In case of rollback, remember per-user/profile install state allUsers = sUserManager.getUserIds(); installedUsers = ps.queryInstalledUsers(allUsers, true); -- cgit v1.2.3-59-g8ed1b