Fix issue #72151749: Lock down 'clear cache' functionality to...
...only system signature Apps that hold the original permission are silently ignored. There is a new internal permission you must hold to actually delete cache files. Test: booted and run, can still clear cache in settings. Bug: 72151749 Change-Id: I47a5cb697e1a4fa3665ac71aaabcda57bef7b561
This commit is contained in:
@@ -2955,11 +2955,16 @@
|
||||
<permission android:name="android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS"
|
||||
android:protectionLevel="signature" />
|
||||
|
||||
<!-- @SystemApi Allows an application to delete cache files.
|
||||
<p>Not for use by third-party applications. -->
|
||||
<!-- @SystemApi Old permission for deleting an app's cache files, no longer used,
|
||||
but signals for us to quietly ignore calls instead of throwing an exception. -->
|
||||
<permission android:name="android.permission.DELETE_CACHE_FILES"
|
||||
android:protectionLevel="signature|privileged" />
|
||||
|
||||
<!-- Allows an application to delete cache files.
|
||||
@hide -->
|
||||
<permission android:name="android.permission.INTERNAL_DELETE_CACHE_FILES"
|
||||
android:protectionLevel="signature" />
|
||||
|
||||
<!-- @SystemApi Allows an application to delete packages.
|
||||
<p>Not for use by third-party applications.
|
||||
<p>Starting in {@link android.os.Build.VERSION_CODES#N}, user confirmation is requested
|
||||
|
||||
@@ -19102,8 +19102,21 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
public void deleteApplicationCacheFilesAsUser(final String packageName, final int userId,
|
||||
final IPackageDataObserver observer) {
|
||||
final int callingUid = Binder.getCallingUid();
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.DELETE_CACHE_FILES, null);
|
||||
if (mContext.checkCallingOrSelfPermission(
|
||||
android.Manifest.permission.INTERNAL_DELETE_CACHE_FILES)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
// If the caller has the old delete cache permission, silently ignore. Else throw.
|
||||
if (mContext.checkCallingOrSelfPermission(
|
||||
android.Manifest.permission.DELETE_CACHE_FILES)
|
||||
== PackageManager.PERMISSION_GRANTED) {
|
||||
Slog.w(TAG, "Calling uid " + callingUid + " does not have " +
|
||||
android.Manifest.permission.INTERNAL_DELETE_CACHE_FILES +
|
||||
", silently ignoring");
|
||||
return;
|
||||
}
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.INTERNAL_DELETE_CACHE_FILES, null);
|
||||
}
|
||||
mPermissionManager.enforceCrossUserPermission(callingUid, userId,
|
||||
/* requireFullPermission= */ true, /* checkShell= */ false,
|
||||
"delete application cache files");
|
||||
|
||||
Reference in New Issue
Block a user