Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8f0fa02c authored by Nikita Ioffe's avatar Nikita Ioffe
Browse files

allocateSpaceForUpdate: clear calling identity before calling into apexd.

Additionally, enforce that callers of allocateSpaceForUpdate have
RECOVERY permission.

Test: presubmit
Bug: 189369298
Change-Id: Id4082d4774a0961c30bf47c7fae0dd3cd65d8908
parent fb5a9a52
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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;
    }