Remove AndroidKeystore key migration code in framework

Since there will be no appId transitions in T, AndroidKeystore keys do
not need to be migrated. Also, even in the future when appId
transitioning is allowed, key migration will not be needed as it is
possible to select a sharedUserInheritor to have its appId persisted,
which means keys will also be inherited implicitly.

The conclusion is that the functionality of migrating keys across the
UID namespace is no longer needed, even in the future.

Test: m
Bug: 220015249
Change-Id: I6d0976fea095ec67292642d20ef8014172e83b2e
This commit is contained in:
John Wu
2022-03-02 14:36:59 -08:00
parent 07ad5ff07a
commit 1b81d4d284
6 changed files with 3 additions and 51 deletions

View File

@@ -36,7 +36,6 @@ import android.os.storage.StorageManagerInternal;
import android.os.storage.VolumeInfo;
import android.security.AndroidKeyStoreMaintenance;
import android.system.keystore2.Domain;
import android.system.keystore2.KeyDescriptor;
import android.text.TextUtils;
import android.util.Log;
import android.util.Slog;
@@ -554,26 +553,6 @@ final class AppDataHelper {
return prepareAppDataFuture;
}
public void migrateKeyStoreData(int previousAppId, int appId) {
// If previous UID is system UID, declaring inheritKeyStoreKeys is not supported.
// Silently ignore the request to migrate keys.
if (previousAppId == Process.SYSTEM_UID) return;
for (int userId : mPm.resolveUserIds(UserHandle.USER_ALL)) {
int srcUid = UserHandle.getUid(userId, previousAppId);
int destUid = UserHandle.getUid(userId, appId);
final KeyDescriptor[] keys = AndroidKeyStoreMaintenance.listEntries(Domain.APP, srcUid);
if (keys == null) continue;
for (final KeyDescriptor key : keys) {
KeyDescriptor dest = new KeyDescriptor();
dest.domain = Domain.APP;
dest.nspace = destUid;
dest.alias = key.alias;
AndroidKeyStoreMaintenance.migrateKeyNamespace(key, dest);
}
}
}
void clearAppDataLIF(AndroidPackage pkg, int userId, int flags) {
if (pkg == null) {
return;

View File

@@ -287,9 +287,6 @@ public interface ParsingPackage extends ParsingPackageRead {
ParsingPackage setInstallLocation(int installLocation);
/** @see R#styleable.AndroidManifest_inheritKeyStoreKeys */
ParsingPackage setInheritKeyStoreKeys(boolean inheritKeyStoreKeys);
/** @see R#styleable.AndroidManifest_sharedUserMaxSdkVersion */
ParsingPackage setLeavingSharedUid(boolean leavingSharedUid);

View File

@@ -494,7 +494,6 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden,
ATTRIBUTIONS_ARE_USER_VISIBLE,
RESET_ENABLED_SETTINGS_ON_APP_DATA_CLEARED,
SDK_LIBRARY,
INHERIT_KEYSTORE_KEYS,
})
public @interface Values {}
private static final long EXTERNAL_STORAGE = 1L;
@@ -547,9 +546,8 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden,
private static final long ATTRIBUTIONS_ARE_USER_VISIBLE = 1L << 47;
private static final long RESET_ENABLED_SETTINGS_ON_APP_DATA_CLEARED = 1L << 48;
private static final long SDK_LIBRARY = 1L << 49;
private static final long INHERIT_KEYSTORE_KEYS = 1L << 50;
private static final long ENABLE_ON_BACK_INVOKED_CALLBACK = 1L << 51;
private static final long LEAVING_SHARED_UID = 1L << 52;
private static final long ENABLE_ON_BACK_INVOKED_CALLBACK = 1L << 50;
private static final long LEAVING_SHARED_UID = 1L << 51;
}
private ParsingPackageImpl setBoolean(@Booleans.Values long flag, boolean value) {
@@ -2393,11 +2391,6 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden,
: mKnownActivityEmbeddingCerts;
}
@Override
public boolean shouldInheritKeyStoreKeys() {
return getBoolean(Booleans.INHERIT_KEYSTORE_KEYS);
}
@Override
public boolean isOnBackInvokedCallbackEnabled() {
return getBoolean(Booleans.ENABLE_ON_BACK_INVOKED_CALLBACK);
@@ -2551,11 +2544,6 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden,
return this;
}
@Override
public ParsingPackageImpl setInheritKeyStoreKeys(boolean value) {
return setBoolean(Booleans.INHERIT_KEYSTORE_KEYS, value);
}
@Override
public ParsingPackageImpl setLeavingSharedUid(boolean value) {
return setBoolean(Booleans.LEAVING_SHARED_UID, value);

View File

@@ -351,11 +351,6 @@ public interface ParsingPackageRead extends PkgWithoutStateAppInfo, PkgWithoutSt
*/
int getLocaleConfigRes();
/**
* @see R.styleable#AndroidManifest_inheritKeyStoreKeys
*/
boolean shouldInheritKeyStoreKeys();
/**
* @see R.styleable.AndroidManifestApplication_enableOnBackInvokedCallback
*/

View File

@@ -894,9 +894,7 @@ public class ParsingPackageUtils {
.setTargetSandboxVersion(anInteger(PARSE_DEFAULT_TARGET_SANDBOX,
R.styleable.AndroidManifest_targetSandboxVersion, sa))
/* Set the global "on SD card" flag */
.setExternalStorage((flags & PARSE_EXTERNAL_STORAGE) != 0)
.setInheritKeyStoreKeys(bool(false,
R.styleable.AndroidManifest_inheritKeyStoreKeys, sa));
.setExternalStorage((flags & PARSE_EXTERNAL_STORAGE) != 0);
boolean foundApp = false;
final int depth = parser.getDepth();

View File

@@ -505,11 +505,6 @@ class AndroidPackageTest : ParcelableComponentTest(AndroidPackage::class, Packag
)
}
),
getSetByValue(
AndroidPackage::shouldInheritKeyStoreKeys,
ParsingPackage::setInheritKeyStoreKeys,
true
),
getter(AndroidPackage::getKnownActivityEmbeddingCerts, setOf("TESTEMBEDDINGCERT")),
getSetByValue(
AndroidPackage::isOnBackInvokedCallbackEnabled,