From fb8537f03b5752bfbd1ed057720ff869f7adc635 Mon Sep 17 00:00:00 2001 From: Florian Mayer Date: Thu, 17 Nov 2022 14:58:25 -0800 Subject: [PATCH] [MTE] disable dev option if security setting is on Test: make RunSettingsRoboTests check dev settings manually Bug: 245624194 Change-Id: I3d9c9b89cd5483eee9800077943b1c30738e4c16 --- res/values/strings.xml | 2 ++ .../RebootWithMtePreferenceController.java | 16 ++++++++++++++++ .../RebootWithMtePreferenceControllerTest.java | 16 ++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index 783b0beb395..456371cb126 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -10475,6 +10475,8 @@ Reboot with MTE System will reboot and allow to experiment with Memory Tagging Extension (MTE). MTE may negatively impact system performance and stability. Will be reset on next subsequent reboot. + Try MTE for a single boot for app development. + MTE is enabled through Advanced memory protection. Capturing system heap dump diff --git a/src/com/android/settings/development/RebootWithMtePreferenceController.java b/src/com/android/settings/development/RebootWithMtePreferenceController.java index 6c038538323..f7bd7261f4a 100644 --- a/src/com/android/settings/development/RebootWithMtePreferenceController.java +++ b/src/com/android/settings/development/RebootWithMtePreferenceController.java @@ -21,8 +21,10 @@ import android.text.TextUtils; import androidx.preference.Preference; +import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.security.MemtagHelper; import com.android.settingslib.development.DeveloperOptionsPreferenceController; public class RebootWithMtePreferenceController extends DeveloperOptionsPreferenceController @@ -43,6 +45,20 @@ public class RebootWithMtePreferenceController extends DeveloperOptionsPreferenc return android.os.SystemProperties.getBoolean("ro.arm64.memtag.bootctl_supported", false); } + @Override + public CharSequence getSummary() { + if (MemtagHelper.isChecked()) { + return mContext.getResources().getString(R.string.reboot_with_mte_already_enabled); + } + return mContext.getResources().getString(R.string.reboot_with_mte_summary); + } + + @Override + public void updateState(Preference preference) { + super.updateState(preference); + preference.setEnabled(!MemtagHelper.isChecked()); + } + @Override public String getPreferenceKey() { return KEY_REBOOT_WITH_MTE; diff --git a/tests/robotests/src/com/android/settings/development/RebootWithMtePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/RebootWithMtePreferenceControllerTest.java index ffbf1f1cb86..d6b10319ef8 100644 --- a/tests/robotests/src/com/android/settings/development/RebootWithMtePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/development/RebootWithMtePreferenceControllerTest.java @@ -22,6 +22,7 @@ import static junit.framework.Assert.assertTrue; import android.content.Context; import android.os.SystemProperties; +import androidx.preference.Preference; import androidx.test.core.app.ApplicationProvider; import org.junit.Before; @@ -61,4 +62,19 @@ public class RebootWithMtePreferenceControllerTest { SystemProperties.set("ro.arm64.memtag.bootctl_supported", "1"); assertTrue(mController.isAvailable()); } + + @Test + public void updateState_enabledByDefault() { + Preference preference = new Preference(mContext); + mController.updateState(preference); + assertTrue(preference.isEnabled()); + } + + @Test + public void updateState_disabledIfAlreadyOn() { + SystemProperties.set("arm64.memtag.bootctl", "memtag"); + Preference preference = new Preference(mContext); + mController.updateState(preference); + assertFalse(preference.isEnabled()); + } }