diff options
| author | 2016-01-28 09:50:00 -0700 | |
|---|---|---|
| committer | 2016-01-28 11:10:03 -0700 | |
| commit | b92b05bb4bcaa6f7869128e925d0331eee62e4da (patch) | |
| tree | 7bc8c987cbc07215f3ec4ae1521dcc877ab1806f | |
| parent | dc5f02778314ac9bcd45bbf356c48c04c96597ec (diff) | |
Report FBE through a feature string.
Since devices can be converted to enable/disable FBE across a
factory reset, we offer to add the features dynamically depending
on device status.
Bug: 26808417
Change-Id: I905140ba500a5e69756b547f2b1d6167b9a37dc6
4 files changed, 42 insertions, 13 deletions
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 476dc46a2118..aaa02bd9ce8e 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -2017,6 +2017,11 @@ public abstract class PackageManager { public static final String FEATURE_SECURELY_REMOVES_USERS = "android.software.securely_removes_users"; + /** {@hide} */ + @SdkConstant(SdkConstantType.FEATURE) + public static final String FEATURE_FILE_BASED_ENCRYPTION + = "android.software.file_based_encryption"; + /** * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: * The device has a full implementation of the android.webkit.* APIs. Devices diff --git a/services/core/java/com/android/server/DiskStatsService.java b/services/core/java/com/android/server/DiskStatsService.java index bc12fc5c44e0..93131488f509 100644 --- a/services/core/java/com/android/server/DiskStatsService.java +++ b/services/core/java/com/android/server/DiskStatsService.java @@ -21,6 +21,7 @@ import android.os.Binder; import android.os.Environment; import android.os.StatFs; import android.os.SystemClock; +import android.os.storage.StorageManager; import java.io.File; import java.io.FileDescriptor; @@ -79,6 +80,10 @@ public class DiskStatsService extends Binder { reportFreeSpace(Environment.getDownloadCacheDirectory(), "Cache", pw); reportFreeSpace(new File("/system"), "System", pw); + if (StorageManager.isNativeFileBasedEncryptionEnabled()) { + pw.println("File-based Encryption: true"); + } + // TODO: Read /proc/yaffs and report interesting values; // add configurable (through args) performance test parameters. } diff --git a/services/core/java/com/android/server/SystemConfig.java b/services/core/java/com/android/server/SystemConfig.java index 4dc46ac63643..5aba22d5c4c7 100644 --- a/services/core/java/com/android/server/SystemConfig.java +++ b/services/core/java/com/android/server/SystemConfig.java @@ -16,20 +16,24 @@ package com.android.server; +import static com.android.internal.util.ArrayUtils.appendInt; + import android.app.ActivityManager; import android.content.pm.FeatureInfo; -import android.os.*; +import android.content.pm.PackageManager; +import android.os.Environment; import android.os.Process; +import android.os.storage.StorageManager; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; import android.util.SparseArray; import android.util.Xml; -import libcore.io.IoUtils; - import com.android.internal.util.XmlUtils; +import libcore.io.IoUtils; + import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -38,8 +42,6 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; -import static com.android.internal.util.ArrayUtils.appendInt; - /** * Loads global system configuration info. */ @@ -351,10 +353,7 @@ public class SystemConfig { Slog.w(TAG, "<feature> without name in " + permFile + " at " + parser.getPositionDescription()); } else if (allowed) { - //Log.i(TAG, "Got feature " + fname); - FeatureInfo fi = new FeatureInfo(); - fi.name = fname; - mAvailableFeatures.put(fname, fi); + addFeature(fname); } XmlUtils.skipCurrentTag(parser); continue; @@ -443,10 +442,29 @@ public class SystemConfig { IoUtils.closeQuietly(permReader); } - for (String fname : mUnavailableFeatures) { - if (mAvailableFeatures.remove(fname) != null) { - Slog.d(TAG, "Removed unavailable feature " + fname); - } + // Some devices can be field-converted to FBE, so offer to splice in + // those features if not already defined by the static config + if (StorageManager.isNativeFileBasedEncryptionEnabled()) { + addFeature(PackageManager.FEATURE_FILE_BASED_ENCRYPTION); + addFeature(PackageManager.FEATURE_SECURELY_REMOVES_USERS); + } + + for (String featureName : mUnavailableFeatures) { + removeFeature(featureName); + } + } + + private void addFeature(String featureName) { + if (!mAvailableFeatures.containsKey(featureName)) { + final FeatureInfo fi = new FeatureInfo(); + fi.name = featureName; + mAvailableFeatures.put(featureName, fi); + } + } + + private void removeFeature(String featureName) { + if (mAvailableFeatures.remove(featureName) != null) { + Slog.d(TAG, "Removed unavailable feature " + featureName); } } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index d11da792e9d6..c3f20eb8afe1 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -76,6 +76,7 @@ import static android.os.Process.SYSTEM_UID; import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER; import static android.system.OsConstants.O_CREAT; import static android.system.OsConstants.O_RDWR; + import static com.android.internal.app.IntentForwarderActivity.FORWARD_INTENT_TO_MANAGED_PROFILE; import static com.android.internal.app.IntentForwarderActivity.FORWARD_INTENT_TO_PARENT; import static com.android.internal.content.NativeLibraryHelper.LIB64_DIR_NAME; |