Remove SMS access for apps other than current SMS handler
Bug: 110098858
Test: atest android.telephony.cts.SmsManagerTest#testContentProviderAccessRestrictions
Change-Id: I9da992565b04ca5fa2656801fd2cfe4b196ef9b4
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index a64eead..4e1a898 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -18,6 +18,7 @@
import static android.Manifest.permission.INTERACT_ACROSS_USERS;
import static android.app.AppOpsManager.MODE_ALLOWED;
+import static android.app.AppOpsManager.MODE_DEFAULT;
import static android.app.AppOpsManager.MODE_ERRORED;
import static android.app.AppOpsManager.MODE_IGNORED;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
@@ -569,11 +570,7 @@
return mode;
}
- if (mReadOp != AppOpsManager.OP_NONE) {
- return mAppOpsManager.noteProxyOp(mReadOp, callingPkg);
- }
-
- return AppOpsManager.MODE_ALLOWED;
+ return noteProxyOp(callingPkg, mReadOp);
}
private int enforceWritePermission(String callingPkg, Uri uri, IBinder callerToken)
@@ -583,8 +580,13 @@
return mode;
}
- if (mWriteOp != AppOpsManager.OP_NONE) {
- return mAppOpsManager.noteProxyOp(mWriteOp, callingPkg);
+ return noteProxyOp(callingPkg, mWriteOp);
+ }
+
+ private int noteProxyOp(String callingPkg, int op) {
+ if (op != AppOpsManager.OP_NONE) {
+ int mode = mAppOpsManager.noteProxyOp(op, callingPkg);
+ return mode == MODE_DEFAULT ? interpretDefaultAppOpMode(op) : mode;
}
return AppOpsManager.MODE_ALLOWED;
@@ -609,12 +611,17 @@
return MODE_ERRORED;
}
- final int permOp = AppOpsManager.permissionToOpCode(permission);
- if (permOp != AppOpsManager.OP_NONE) {
- return mTransport.mAppOpsManager.noteProxyOp(permOp, callingPkg);
- }
+ return mTransport.noteProxyOp(callingPkg, AppOpsManager.permissionToOpCode(permission));
+ }
- return MODE_ALLOWED;
+ /**
+ * Allows for custom interpretations of {@link AppOpsManager#MODE_DEFAULT} by individual
+ * content providers
+ *
+ * @hide
+ */
+ protected int interpretDefaultAppOpMode(int op) {
+ return MODE_IGNORED;
}
/** {@hide} */