From 8f0fa02c30f33237c18f75166a63666657551b7d Mon Sep 17 00:00:00 2001 From: Nikita Ioffe Date: Fri, 18 Jun 2021 16:03:20 +0100 Subject: [PATCH] allocateSpaceForUpdate: clear calling identity before calling into apexd. Additionally, enforce that callers of allocateSpaceForUpdate have RECOVERY permission. Test: presubmit Bug: 189369298 Change-Id: Id4082d4774a0961c30bf47c7fae0dd3cd65d8908 --- .../android/server/recoverysystem/RecoverySystemService.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/services/core/java/com/android/server/recoverysystem/RecoverySystemService.java b/services/core/java/com/android/server/recoverysystem/RecoverySystemService.java index ed4a7bf107d1f..f72adb609f6fb 100644 --- a/services/core/java/com/android/server/recoverysystem/RecoverySystemService.java +++ b/services/core/java/com/android/server/recoverysystem/RecoverySystemService.java @@ -961,11 +961,13 @@ public class RecoverySystemService extends IRecoverySystem.Stub implements Reboo @Override public boolean allocateSpaceForUpdate(String packageFile) { + mContext.enforceCallingOrSelfPermission(android.Manifest.permission.RECOVERY, null); if (!isUpdatableApexSupported()) { Log.i(TAG, "Updatable Apex not supported, " + "allocateSpaceForUpdate does nothing."); return true; } + final long token = Binder.clearCallingIdentity(); try { CompressedApexInfoList apexInfoList = getCompressedApexInfoList(packageFile); ApexManager apexManager = ApexManager.getInstance(); @@ -975,6 +977,8 @@ public class RecoverySystemService extends IRecoverySystem.Stub implements Reboo e.rethrowAsRuntimeException(); } catch (IOException | UnsupportedOperationException e) { Slog.e(TAG, "Failed to reserve space for compressed apex: ", e); + } finally { + Binder.restoreCallingIdentity(token); } return false; }