Merge changes Ib5bcfb6a,I46c2a472,If0c75774,Iab7ba8d3
* changes: Stub out some FDE methods in StorageManager Stop trying to update FDE password from LockSettingsService Remove clearEncryptionPassword() from LockPatternUtils Stop trying to get/set fields in FDE footer
This commit is contained in:
@@ -82,7 +82,6 @@ import android.os.SystemProperties;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.MediaStore;
|
||||
import android.provider.Settings;
|
||||
import android.sysprop.VoldProperties;
|
||||
import android.system.ErrnoException;
|
||||
import android.system.Os;
|
||||
import android.system.OsConstants;
|
||||
@@ -1636,10 +1635,7 @@ public class StorageManager {
|
||||
* false not encrypted or file encrypted
|
||||
*/
|
||||
public static boolean isBlockEncrypted() {
|
||||
if (!isEncrypted()) {
|
||||
return false;
|
||||
}
|
||||
return RoSystemProperties.CRYPTO_BLOCK_ENCRYPTED;
|
||||
return false;
|
||||
}
|
||||
|
||||
/** {@hide}
|
||||
@@ -1649,18 +1645,7 @@ public class StorageManager {
|
||||
* false not encrypted, file encrypted or default block encrypted
|
||||
*/
|
||||
public static boolean isNonDefaultBlockEncrypted() {
|
||||
if (!isBlockEncrypted()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
IStorageManager storageManager = IStorageManager.Stub.asInterface(
|
||||
ServiceManager.getService("mount"));
|
||||
return storageManager.getPasswordType() != CRYPT_TYPE_DEFAULT;
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Error getting encryption type");
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/** {@hide}
|
||||
@@ -1674,8 +1659,7 @@ public class StorageManager {
|
||||
* framework, so no service needs to check for changes during their lifespan
|
||||
*/
|
||||
public static boolean isBlockEncrypting() {
|
||||
final String state = VoldProperties.encrypt_progress().orElse("");
|
||||
return !"".equalsIgnoreCase(state);
|
||||
return false;
|
||||
}
|
||||
|
||||
/** {@hide}
|
||||
@@ -1690,8 +1674,7 @@ public class StorageManager {
|
||||
* framework, so no service needs to check for changes during their lifespan
|
||||
*/
|
||||
public static boolean inCryptKeeperBounce() {
|
||||
final String status = VoldProperties.decrypt().orElse("");
|
||||
return "trigger_restart_min_framework".equals(status);
|
||||
return false;
|
||||
}
|
||||
|
||||
/** {@hide} */
|
||||
|
||||
@@ -95,5 +95,4 @@ interface ILockSettings {
|
||||
boolean hasSecureLockScreen();
|
||||
boolean tryUnlockWithCachedUnifiedChallenge(int userId);
|
||||
void removeCachedUnifiedChallenge(int userId);
|
||||
void updateEncryptionPassword(int type, in byte[] password);
|
||||
}
|
||||
|
||||
@@ -701,38 +701,14 @@ public class LockPatternUtils {
|
||||
return true;
|
||||
}
|
||||
|
||||
private void updateCryptoUserInfo(int userId) {
|
||||
if (userId != UserHandle.USER_SYSTEM) {
|
||||
return;
|
||||
}
|
||||
|
||||
final String ownerInfo = isOwnerInfoEnabled(userId) ? getOwnerInfo(userId) : "";
|
||||
|
||||
IBinder service = ServiceManager.getService("mount");
|
||||
if (service == null) {
|
||||
Log.e(TAG, "Could not find the mount service to update the user info");
|
||||
return;
|
||||
}
|
||||
|
||||
IStorageManager storageManager = IStorageManager.Stub.asInterface(service);
|
||||
try {
|
||||
Log.d(TAG, "Setting owner info");
|
||||
storageManager.setField(StorageManager.OWNER_INFO_KEY, ownerInfo);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Error changing user info", e);
|
||||
}
|
||||
}
|
||||
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
|
||||
public void setOwnerInfo(String info, int userId) {
|
||||
setString(LOCK_SCREEN_OWNER_INFO, info, userId);
|
||||
updateCryptoUserInfo(userId);
|
||||
}
|
||||
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
|
||||
public void setOwnerInfoEnabled(boolean enabled, int userId) {
|
||||
setBoolean(LOCK_SCREEN_OWNER_INFO_ENABLED, enabled, userId);
|
||||
updateCryptoUserInfo(userId);
|
||||
}
|
||||
|
||||
@UnsupportedAppUsage
|
||||
@@ -786,17 +762,6 @@ public class LockPatternUtils {
|
||||
return StorageManager.isFileEncryptedNativeOrEmulated();
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears the encryption password.
|
||||
*/
|
||||
public void clearEncryptionPassword() {
|
||||
try {
|
||||
getLockSettings().updateEncryptionPassword(StorageManager.CRYPT_TYPE_DEFAULT, null);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Couldn't clear encryption password");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the quality mode for {@code userHandle}.
|
||||
* @see DevicePolicyManager#getPasswordQuality(android.content.ComponentName)
|
||||
@@ -988,24 +953,6 @@ public class LockPatternUtils {
|
||||
*/
|
||||
public void setVisiblePatternEnabled(boolean enabled, int userId) {
|
||||
setBoolean(Settings.Secure.LOCK_PATTERN_VISIBLE, enabled, userId);
|
||||
|
||||
// Update for crypto if owner
|
||||
if (userId != UserHandle.USER_SYSTEM) {
|
||||
return;
|
||||
}
|
||||
|
||||
IBinder service = ServiceManager.getService("mount");
|
||||
if (service == null) {
|
||||
Log.e(TAG, "Could not find the mount service to update the user info");
|
||||
return;
|
||||
}
|
||||
|
||||
IStorageManager storageManager = IStorageManager.Stub.asInterface(service);
|
||||
try {
|
||||
storageManager.setField(StorageManager.PATTERN_VISIBLE_KEY, enabled ? "1" : "0");
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Error changing pattern visible state", e);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isVisiblePatternEverChosen(int userId) {
|
||||
@@ -1016,23 +963,7 @@ public class LockPatternUtils {
|
||||
* Set whether the visible password is enabled for cryptkeeper screen.
|
||||
*/
|
||||
public void setVisiblePasswordEnabled(boolean enabled, int userId) {
|
||||
// Update for crypto if owner
|
||||
if (userId != UserHandle.USER_SYSTEM) {
|
||||
return;
|
||||
}
|
||||
|
||||
IBinder service = ServiceManager.getService("mount");
|
||||
if (service == null) {
|
||||
Log.e(TAG, "Could not find the mount service to update the user info");
|
||||
return;
|
||||
}
|
||||
|
||||
IStorageManager storageManager = IStorageManager.Stub.asInterface(service);
|
||||
try {
|
||||
storageManager.setField(StorageManager.PASSWORD_VISIBLE_KEY, enabled ? "1" : "0");
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Error changing password visible state", e);
|
||||
}
|
||||
// No longer does anything.
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -75,7 +75,6 @@ import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManagerInternal;
|
||||
import android.content.pm.ProviderInfo;
|
||||
import android.content.pm.UserInfo;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.ObbInfo;
|
||||
import android.database.ContentObserver;
|
||||
import android.net.Uri;
|
||||
@@ -122,7 +121,6 @@ import android.provider.DocumentsContract;
|
||||
import android.provider.Downloads;
|
||||
import android.provider.MediaStore;
|
||||
import android.provider.Settings;
|
||||
import android.sysprop.VoldProperties;
|
||||
import android.text.TextUtils;
|
||||
import android.text.format.DateUtils;
|
||||
import android.util.ArrayMap;
|
||||
@@ -1380,39 +1378,6 @@ class StorageManagerService extends IStorageManager.Stub
|
||||
private void handleDaemonConnected() {
|
||||
initIfBootedAndConnected();
|
||||
resetIfBootedAndConnected();
|
||||
|
||||
// On an encrypted device we can't see system properties yet, so pull
|
||||
// the system locale out of the mount service.
|
||||
if ("".equals(VoldProperties.encrypt_progress().orElse(""))) {
|
||||
copyLocaleFromMountService();
|
||||
}
|
||||
}
|
||||
|
||||
private void copyLocaleFromMountService() {
|
||||
String systemLocale;
|
||||
try {
|
||||
systemLocale = getField(StorageManager.SYSTEM_LOCALE_KEY);
|
||||
} catch (RemoteException e) {
|
||||
return;
|
||||
}
|
||||
if (TextUtils.isEmpty(systemLocale)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Slog.d(TAG, "Got locale " + systemLocale + " from mount service");
|
||||
Locale locale = Locale.forLanguageTag(systemLocale);
|
||||
Configuration config = new Configuration();
|
||||
config.setLocale(locale);
|
||||
try {
|
||||
ActivityManager.getService().updatePersistentConfigurationWithAttribution(config,
|
||||
mContext.getOpPackageName(), mContext.getAttributionTag());
|
||||
} catch (RemoteException e) {
|
||||
Slog.e(TAG, "Error setting system locale from mount service", e);
|
||||
}
|
||||
|
||||
// Temporary workaround for http://b/17945169.
|
||||
Slog.d(TAG, "Setting system properties to " + systemLocale + " from mount service");
|
||||
SystemProperties.set("persist.sys.locale", locale.toLanguageTag());
|
||||
}
|
||||
|
||||
private final IVoldListener mListener = new IVoldListener.Stub() {
|
||||
|
||||
@@ -1761,7 +1761,10 @@ public class LockSettingsService extends ILockSettings.Stub {
|
||||
}
|
||||
|
||||
private void onPostPasswordChanged(LockscreenCredential newCredential, int userHandle) {
|
||||
updateEncryptionPasswordIfNeeded(newCredential, userHandle);
|
||||
if (userHandle == UserHandle.USER_SYSTEM && isDeviceEncryptionEnabled() &&
|
||||
shouldEncryptWithCredentials() && newCredential.isNone()) {
|
||||
setCredentialRequiredToDecrypt(false);
|
||||
}
|
||||
if (newCredential.isPattern()) {
|
||||
setBoolean(LockPatternUtils.PATTERN_EVER_CHOSEN_KEY, true, userHandle);
|
||||
}
|
||||
@@ -1769,26 +1772,6 @@ public class LockSettingsService extends ILockSettings.Stub {
|
||||
mContext.getSystemService(TrustManager.class).reportEnabledTrustAgentsChanged(userHandle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update device encryption password if calling user is USER_SYSTEM and device supports
|
||||
* encryption.
|
||||
*/
|
||||
private void updateEncryptionPasswordIfNeeded(LockscreenCredential credential, int userHandle) {
|
||||
// Update the device encryption password.
|
||||
if (userHandle != UserHandle.USER_SYSTEM || !isDeviceEncryptionEnabled()) {
|
||||
return;
|
||||
}
|
||||
if (!shouldEncryptWithCredentials()) {
|
||||
updateEncryptionPassword(StorageManager.CRYPT_TYPE_DEFAULT, null);
|
||||
return;
|
||||
}
|
||||
if (credential.isNone()) {
|
||||
// Set the encryption password to default.
|
||||
setCredentialRequiredToDecrypt(false);
|
||||
}
|
||||
updateEncryptionPassword(credential.getStorageCryptType(), credential.getCredential());
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the hash of the *current* password in the password history list, if device policy
|
||||
* enforces password history requirement.
|
||||
@@ -1883,34 +1866,6 @@ public class LockSettingsService extends ILockSettings.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
/** Update the encryption password if it is enabled **/
|
||||
@Override
|
||||
public void updateEncryptionPassword(final int type, final byte[] password) {
|
||||
if (!hasSecureLockScreen() && password != null && password.length != 0) {
|
||||
throw new UnsupportedOperationException(
|
||||
"This operation requires the lock screen feature.");
|
||||
}
|
||||
if (!isDeviceEncryptionEnabled()) {
|
||||
return;
|
||||
}
|
||||
final IBinder service = ServiceManager.getService("mount");
|
||||
if (service == null) {
|
||||
Slog.e(TAG, "Could not find the mount service to update the encryption password");
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO(b/120484642): This is a location where we still use a String for vold
|
||||
String passwordString = password != null ? new String(password) : null;
|
||||
mHandler.post(() -> {
|
||||
IStorageManager storageManager = mInjector.getStorageManager();
|
||||
try {
|
||||
storageManager.changeEncryptionPassword(type, passwordString);
|
||||
} catch (RemoteException e) {
|
||||
Slog.e(TAG, "Error changing encryption password", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@VisibleForTesting /** Note: this method is overridden in unit tests */
|
||||
protected void tieProfileLockToParent(int userId, LockscreenCredential password) {
|
||||
if (DEBUG) Slog.v(TAG, "tieProfileLockToParent for user: " + userId);
|
||||
|
||||
@@ -203,8 +203,6 @@ import android.os.UpdateLock;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.os.WorkSource;
|
||||
import android.os.storage.IStorageManager;
|
||||
import android.os.storage.StorageManager;
|
||||
import android.provider.Settings;
|
||||
import android.service.dreams.DreamActivity;
|
||||
import android.service.voice.IVoiceInteractionSession;
|
||||
@@ -4209,11 +4207,6 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
||||
SystemProperties.set("persist.sys.locale",
|
||||
locales.get(bestLocaleIndex).toLanguageTag());
|
||||
LocaleList.setDefault(locales, bestLocaleIndex);
|
||||
|
||||
final Message m = PooledLambda.obtainMessage(
|
||||
ActivityTaskManagerService::sendLocaleToMountDaemonMsg, this,
|
||||
locales.get(bestLocaleIndex));
|
||||
mH.sendMessage(m);
|
||||
}
|
||||
|
||||
mTempConfig.seq = increaseConfigurationSeqLocked();
|
||||
@@ -4367,17 +4360,6 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
||||
Settings.System.putConfigurationForUser(resolver, config, userId);
|
||||
}
|
||||
|
||||
private void sendLocaleToMountDaemonMsg(Locale l) {
|
||||
try {
|
||||
IBinder service = ServiceManager.getService("mount");
|
||||
IStorageManager storageManager = IStorageManager.Stub.asInterface(service);
|
||||
Log.d(TAG, "Storing locale " + l.toLanguageTag() + " for decryption UI");
|
||||
storageManager.setField(StorageManager.SYSTEM_LOCALE_KEY, l.toLanguageTag());
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Error storing locale for decryption UI", e);
|
||||
}
|
||||
}
|
||||
|
||||
private void expireStartAsCallerTokenMsg(IBinder permissionToken) {
|
||||
mStartActivitySources.remove(permissionToken);
|
||||
mExpiredStartAsCallerTokens.add(permissionToken);
|
||||
|
||||
Reference in New Issue
Block a user