Update signature permissions when package signing is changed.

Fixes: 288515966
Test: KeySetHostTest#testUpgradeDefinerSigPerm{Gained,Lost}
Change-Id: I56f6bd7f6b772c6fcb06e26445df7d30048cd189
diff --git a/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionPolicy.kt b/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionPolicy.kt
index d39c8a0..aa86cd6 100644
--- a/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionPolicy.kt
+++ b/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionPolicy.kt
@@ -390,7 +390,14 @@
         packageState: PackageState,
         changedPermissionNames: MutableIndexedSet<String>
     ) {
-        packageState.androidPackage!!.permissions.forEachIndexed { _, parsedPermission ->
+        val androidPackage = packageState.androidPackage!!
+        // This may not be the same package as the old permission because the old permission owner
+        // can be different, hence using this somewhat strange name to prevent misuse.
+        val oldNewPackage = oldState.externalState.packageStates[packageState.packageName]
+            ?.androidPackage
+        val isPackageSigningChanged = oldNewPackage != null &&
+                androidPackage.signingDetails != oldNewPackage.signingDetails
+        androidPackage.permissions.forEachIndexed { _, parsedPermission ->
             val newPermissionInfo = PackageInfoUtils.generatePermissionInfo(
                 parsedPermission, PackageManager.GET_META_DATA.toLong()
             )!!
@@ -520,7 +527,7 @@
                     newPackageName != oldPermission.packageName ||
                     newPermission.protectionLevel != oldPermission.protectionLevel || (
                         oldPermission.isReconciled && (
-                            (
+                            (newPermission.isSignature && isPackageSigningChanged) || (
                                 newPermission.isKnownSigner &&
                                     newPermission.knownCerts != oldPermission.knownCerts
                             ) || (