diff options
author | 2023-05-11 13:52:01 +0800 | |
---|---|---|
committer | 2023-05-15 04:35:32 +0000 | |
commit | 081e525ff6f0d9d252954b8e926550f25e230409 (patch) | |
tree | a31f373240078176571f2278620ad3cfe316bfa4 | |
parent | 2ac252fb9340c6a97cba1834f7864fe00d2a1815 (diff) |
Ignore the reboot to normal intent when DSU is locked
This feature provides the application with the ability to lock the device into DSU mode, allowing only authorized users to exit.
Bug: 275484855
Test: manual testing with a slot name ends with ".lock"
Change-Id: Ie00fd897daf2dfb11c2c792887a0e95ee164cea3
4 files changed, 34 insertions, 4 deletions
diff --git a/core/java/android/os/image/DynamicSystemManager.java b/core/java/android/os/image/DynamicSystemManager.java index 9610b16a312c..536795bafb1c 100644 --- a/core/java/android/os/image/DynamicSystemManager.java +++ b/core/java/android/os/image/DynamicSystemManager.java @@ -285,4 +285,16 @@ public class DynamicSystemManager { throw new RuntimeException(e.toString()); } } + + /** + * Returns the active DSU slot + */ + @RequiresPermission(android.Manifest.permission.MANAGE_DYNAMIC_SYSTEM) + public String getActiveDsuSlot() { + try { + return mService.getActiveDsuSlot(); + } catch (RemoteException e) { + throw new RuntimeException(e.toString()); + } + } } diff --git a/core/java/android/os/image/IDynamicSystemService.aidl b/core/java/android/os/image/IDynamicSystemService.aidl index 755368a85c40..0280ebbd87ab 100644 --- a/core/java/android/os/image/IDynamicSystemService.aidl +++ b/core/java/android/os/image/IDynamicSystemService.aidl @@ -145,4 +145,10 @@ interface IDynamicSystemService */ @EnforcePermission("MANAGE_DYNAMIC_SYSTEM") long suggestScratchSize(); + + /** + * Get the active DSU slot + */ + @EnforcePermission("MANAGE_DYNAMIC_SYSTEM") + String getActiveDsuSlot(); } diff --git a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java index 5e42f705cf4b..e78de4957e22 100644 --- a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java +++ b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java @@ -423,7 +423,10 @@ public class DynamicSystemInstallationService extends Service Log.e(TAG, "It's already running in normal system."); return; } - + if (mDynSystem.getActiveDsuSlot().endsWith(".lock")) { + Log.e(TAG, "Ignore the reboot intent for a locked DSU slot"); + return; + } if (!mDynSystem.setEnable(/* enable = */ false, /* oneShot = */ false)) { Log.e(TAG, "Failed to disable DynamicSystem."); diff --git a/services/core/java/com/android/server/DynamicSystemService.java b/services/core/java/com/android/server/DynamicSystemService.java index b0c1d05b0dd4..cbacee6ba72c 100644 --- a/services/core/java/com/android/server/DynamicSystemService.java +++ b/services/core/java/com/android/server/DynamicSystemService.java @@ -226,9 +226,7 @@ public class DynamicSystemService extends IDynamicSystemService.Stub { IGsiService gsiService = getGsiService(); if (enable) { try { - if (mDsuSlot == null) { - mDsuSlot = gsiService.getActiveDsuSlot(); - } + getActiveDsuSlot(); GsiServiceCallback callback = new GsiServiceCallback(); synchronized (callback) { gsiService.enableGsiAsync(oneShot, mDsuSlot, callback); @@ -287,4 +285,15 @@ public class DynamicSystemService extends IDynamicSystemService.Stub { return getGsiService().suggestScratchSize(); } + + @Override + @EnforcePermission(android.Manifest.permission.MANAGE_DYNAMIC_SYSTEM) + public String getActiveDsuSlot() throws RemoteException { + super.getActiveDsuSlot_enforcePermission(); + + if (mDsuSlot == null) { + mDsuSlot = getGsiService().getActiveDsuSlot(); + } + return mDsuSlot; + } } |