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

Commit e6c5650e authored by Philip P. Moltmann's avatar Philip P. Moltmann
Browse files

Treat MODE_FOREGROUND as ALLOWED for appop checks

noteOp always resolved MODE_FOREGROUND into IGNORED/ALLOWED
checkOp resolves it too, but checkOpRaw does not resolved it and might
return it.

Preflight checks should be independant of the uid state, hence treat
MODE_FOREGROUND similar to ALLOWED as MODE_FOREGROUND might allow it.

Bug: 150508177
Fixes: 148197098
Test: TH
Change-Id: I7b4f53c7ce638f92747d452f2d2f72d098e94b78
parent f9fe6f87
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -435,10 +435,11 @@ public final class PermissionChecker {
        final AppOpsManager appOpsManager = context.getSystemService(AppOpsManager.class);
        final int opMode = (forDataDelivery)
                ? appOpsManager.noteProxyOpNoThrow(op, packageName, uid, attributionTag, message)
                : appOpsManager.unsafeCheckOpNoThrow(op, uid, packageName);
                : appOpsManager.unsafeCheckOpRawNoThrow(op, uid, packageName);

        switch (opMode) {
            case AppOpsManager.MODE_ALLOWED: {
            case AppOpsManager.MODE_ALLOWED:
            case AppOpsManager.MODE_FOREGROUND: {
                return PERMISSION_GRANTED;
            }
            case AppOpsManager.MODE_DEFAULT: {
@@ -467,11 +468,13 @@ public final class PermissionChecker {
        final AppOpsManager appOpsManager = context.getSystemService(AppOpsManager.class);
        final int opMode = (forDataDelivery)
                ? appOpsManager.noteProxyOpNoThrow(op, packageName, uid, attributionTag, message)
                : appOpsManager.unsafeCheckOpNoThrow(op, uid, packageName);
                : appOpsManager.unsafeCheckOpRawNoThrow(op, uid, packageName);

        if (opMode == AppOpsManager.MODE_ALLOWED) {
        switch (opMode) {
            case AppOpsManager.MODE_ALLOWED:
            case AppOpsManager.MODE_FOREGROUND:
                return PERMISSION_GRANTED;
        } else {
            default:
                return PERMISSION_SOFT_DENIED;
        }
    }