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

Commit 640b18bd authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by Android (Google) Code Review
Browse files

Merge "Add fallback for datasource without UPDATE_APP_OP_STATS" into sc-dev

parents 013d0d1b 773862fd
Loading
Loading
Loading
Loading
+37 −9
Original line number Diff line number Diff line
@@ -1066,11 +1066,25 @@ public final class PermissionChecker {
                return AppOpsManager.MODE_ERRORED;
            }
            if (selfAccess) {
                // If the datasource is not in a trusted platform component then in would not
                // have UPDATE_APP_OPS_STATS and the call below would fail. The problem is that
                // an app is exposing runtime permission protected data but cannot blame others
                // in a trusted way which would not properly show in permission usage UIs.
                // As a fallback we note a proxy op that blames the app and the datasource.
                try {
                    return appOpsManager.startOpNoThrow(op, resolvedAttributionSource.getUid(),
                            resolvedAttributionSource.getPackageName(),
                            /*startIfModeDefault*/ false,
                            resolvedAttributionSource.getAttributionTag(),
                            message);
                } catch (SecurityException e) {
                    Slog.w(LOG_TAG, "Datasource " + attributionSource + " protecting data with"
                            + " platform defined runtime permission "
                            + AppOpsManager.opToPermission(op) + " while not having "
                            + Manifest.permission.UPDATE_APP_OPS_STATS);
                    return appOpsManager.startProxyOpNoThrow(op, attributionSource, message,
                            skipProxyOperation);
                }
            } else {
                return appOpsManager.startProxyOpNoThrow(op, resolvedAttributionSource, message,
                        skipProxyOperation);
@@ -1082,10 +1096,24 @@ public final class PermissionChecker {
                return AppOpsManager.MODE_ERRORED;
            }
            if (selfAccess) {
                // If the datasource is not in a trusted platform component then in would not
                // have UPDATE_APP_OPS_STATS and the call below would fail. The problem is that
                // an app is exposing runtime permission protected data but cannot blame others
                // in a trusted way which would not properly show in permission usage UIs.
                // As a fallback we note a proxy op that blames the app and the datasource.
                try {
                    return appOpsManager.noteOpNoThrow(op, resolvedAttributionSource.getUid(),
                            resolvedAttributionSource.getPackageName(),
                            resolvedAttributionSource.getAttributionTag(),
                            message);
                } catch (SecurityException e) {
                    Slog.w(LOG_TAG, "Datasource " + attributionSource + " protecting data with"
                            + " platform defined runtime permission "
                            + AppOpsManager.opToPermission(op) + " while not having "
                            + Manifest.permission.UPDATE_APP_OPS_STATS);
                    return appOpsManager.noteProxyOpNoThrow(op, attributionSource, message,
                            skipProxyOperation);
                }
            } else {
                return appOpsManager.noteProxyOpNoThrow(op, resolvedAttributionSource, message,
                        skipProxyOperation);