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

Commit 212d81a0 authored by Kenny Root's avatar Kenny Root Committed by Android (Google) Code Review
Browse files

Merge "Move all the permissions check up for unmount" into gingerbread

parents 038cabe0 f1121dc1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ public class ObbScanner {

        final File obbFile = new File(filePath);
        if (!obbFile.exists()) {
            throw new IllegalArgumentException("OBB file does nto exist: " + filePath);
            throw new IllegalArgumentException("OBB file does not exist: " + filePath);
        }

        final String canonicalFilePath = obbFile.getCanonicalPath();
+22 −13
Original line number Diff line number Diff line
@@ -1451,11 +1451,6 @@ class MountService extends IMountService.Stub
        mHandler.sendEmptyMessage(H_UNMOUNT_PM_DONE);
    }

    private boolean isCallerOwnerOfPackageOrSystem(String packageName) {
        final int callerUid = Binder.getCallingUid();
        return isUidOwnerOfPackageOrSystem(packageName, callerUid);
    }

    private boolean isUidOwnerOfPackageOrSystem(String packageName, int callerUid) {
        if (callerUid == android.os.Process.SYSTEM_UID) {
            return true;
@@ -1507,6 +1502,12 @@ class MountService extends IMountService.Stub
        waitForReady();
        warnOnNotMounted();

        if (filename == null) {
            throw new IllegalArgumentException("filename cannot be null");
        } else if (token == null) {
            throw new IllegalArgumentException("token cannot be null");
        }

        final ObbState obbState;

        synchronized (mObbMounts) {
@@ -1533,6 +1534,12 @@ class MountService extends IMountService.Stub
    }

    public void unmountObb(String filename, boolean force, IObbActionListener token) {
        if (filename == null) {
            throw new IllegalArgumentException("filename cannot be null");
        } else if (token == null) {
            throw new IllegalArgumentException("token cannot be null");
        }

        final ObbState obbState;

        synchronized (mObbMounts) {
@@ -1540,6 +1547,12 @@ class MountService extends IMountService.Stub
                throw new IllegalArgumentException("OBB is not mounted");
            }
            obbState = mObbPathToStateMap.get(filename);

            if (Binder.getCallingUid() != obbState.callerUid) {
                throw new SecurityException("caller UID does not match original mount caller UID");
            } else if (!token.asBinder().equals(obbState.token.asBinder())) {
                throw new SecurityException("caller does not match original mount caller");
            }
        }

        UnmountObbAction action = new UnmountObbAction(obbState, force);
@@ -1758,9 +1771,9 @@ class MountService extends IMountService.Stub
        }

        public void handleExecute() throws RemoteException, IOException {
            ObbInfo obbInfo = mContainerService.getObbInfo(mObbState.filename);
            final ObbInfo obbInfo = mContainerService.getObbInfo(mObbState.filename);
            if (obbInfo == null) {
                throw new IOException("Couldn't read OBB file");
                throw new IOException("Couldn't read OBB file: " + mObbState.filename);
            }

            if (!isUidOwnerOfPackageOrSystem(obbInfo.packageName, mObbState.callerUid)) {
@@ -1833,13 +1846,9 @@ class MountService extends IMountService.Stub
        }

        public void handleExecute() throws RemoteException, IOException {
            ObbInfo obbInfo = mContainerService.getObbInfo(mObbState.filename);
            final ObbInfo obbInfo = mContainerService.getObbInfo(mObbState.filename);
            if (obbInfo == null) {
                throw new IOException("Couldn't read OBB file");
            }

            if (!isCallerOwnerOfPackageOrSystem(obbInfo.packageName)) {
                throw new IllegalArgumentException("Caller package does not match OBB file");
                throw new IOException("Couldn't read OBB file: " + mObbState.filename);
            }

            int rc = StorageResultCode.OperationSucceeded;