Disallow external storage access without restricting other api calls

Currently, sandbox cannot call any apis from StorageManager that checks
calling package has same uid as calling uid. This CL fixes that by using
pm.isSameApp() api.

Additionally, since Environment.java fetches the initial application
context, the uid for that does not fall under the sandbox uid range. It
falls under app uid range. We fix the problem by checking for
PROPERTY_NO_APP_DATA_STORAGE flag on the application.

Bug: 228424287
Test: atest CtsSdkSandboxInprocessTests (see ag/17657742)
Change-Id: I8d9fca369cfbed47b40a42a44a40ff73acb712ec
This commit is contained in:
Samiul Islam
2022-04-08 16:00:34 +01:00
committed by Mohammad Samiul Islam
parent c9bf2574b4
commit db9e238ec7
2 changed files with 13 additions and 13 deletions

View File

@@ -1361,6 +1361,18 @@ public class Environment {
return false;
}
// Apps with PROPERTY_NO_APP_DATA_STORAGE should not be allowed in scoped storage
final String packageName = AppGlobals.getInitialPackage();
try {
final PackageManager.Property noAppStorageProp = packageManager.getProperty(
PackageManager.PROPERTY_NO_APP_DATA_STORAGE, packageName);
if (noAppStorageProp != null && noAppStorageProp.getBoolean()) {
return false;
}
} catch (PackageManager.NameNotFoundException ignore) {
// Property not defined for the package
}
boolean defaultScopedStorage = Compatibility.isChangeEnabled(DEFAULT_SCOPED_STORAGE);
boolean forceEnableScopedStorage = Compatibility.isChangeEnabled(
FORCE_ENABLE_SCOPED_STORAGE);

View File

@@ -3055,19 +3055,7 @@ class StorageManagerService extends IStorageManager.Stub
return true;
}
if (packageName == null) {
return false;
}
final int packageUid = mPmInternal.getPackageUid(packageName,
PackageManager.MATCH_DEBUG_TRIAGED_MISSING, UserHandle.getUserId(callerUid));
if (DEBUG_OBB) {
Slog.d(TAG, "packageName = " + packageName + ", packageUid = " +
packageUid + ", callerUid = " + callerUid);
}
return callerUid == packageUid;
return mPmInternal.isSameApp(packageName, callerUid, UserHandle.getUserId(callerUid));
}
@Override