Merge "[SettingsProvider] move getCallingPackage() outside of lock" into sc-dev am: c1baf3e115
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15147049 Change-Id: Id9c1f2c8beb192f1cad747f2bd8e34e5967a559b
This commit is contained in:
@@ -1145,6 +1145,7 @@ public class SettingsProvider extends ContentProvider {
|
||||
}
|
||||
|
||||
enforceWritePermission(Manifest.permission.WRITE_DEVICE_CONFIG);
|
||||
final String callingPackage = resolveCallingPackage();
|
||||
|
||||
synchronized (mLock) {
|
||||
if (isSyncDisabledConfigLocked()) {
|
||||
@@ -1152,7 +1153,7 @@ public class SettingsProvider extends ContentProvider {
|
||||
}
|
||||
final int key = makeKey(SETTINGS_TYPE_CONFIG, UserHandle.USER_SYSTEM);
|
||||
boolean success = mSettingsRegistry.setConfigSettingsLocked(key, prefix, keyValues,
|
||||
resolveCallingPackage());
|
||||
callingPackage);
|
||||
return success ? SET_ALL_RESULT_SUCCESS : SET_ALL_RESULT_FAILURE;
|
||||
}
|
||||
}
|
||||
@@ -1258,6 +1259,7 @@ public class SettingsProvider extends ContentProvider {
|
||||
private boolean mutateConfigSetting(String name, String value, String prefix,
|
||||
boolean makeDefault, int operation, int mode) {
|
||||
enforceWritePermission(Manifest.permission.WRITE_DEVICE_CONFIG);
|
||||
final String callingPackage = resolveCallingPackage();
|
||||
|
||||
// Perform the mutation.
|
||||
synchronized (mLock) {
|
||||
@@ -1265,7 +1267,7 @@ public class SettingsProvider extends ContentProvider {
|
||||
case MUTATION_OPERATION_INSERT: {
|
||||
return mSettingsRegistry.insertSettingLocked(SETTINGS_TYPE_CONFIG,
|
||||
UserHandle.USER_SYSTEM, name, value, null, makeDefault, true,
|
||||
resolveCallingPackage(), false, null,
|
||||
callingPackage, false, null,
|
||||
/* overrideableByRestore */ false);
|
||||
}
|
||||
|
||||
@@ -1276,7 +1278,7 @@ public class SettingsProvider extends ContentProvider {
|
||||
|
||||
case MUTATION_OPERATION_RESET: {
|
||||
mSettingsRegistry.resetSettingsLocked(SETTINGS_TYPE_CONFIG,
|
||||
UserHandle.USER_SYSTEM, resolveCallingPackage(), mode, null, prefix);
|
||||
UserHandle.USER_SYSTEM, callingPackage, mode, null, prefix);
|
||||
} return true;
|
||||
}
|
||||
}
|
||||
@@ -1434,13 +1436,15 @@ public class SettingsProvider extends ContentProvider {
|
||||
return false;
|
||||
}
|
||||
|
||||
final String callingPackage = getCallingPackage();
|
||||
|
||||
// Perform the mutation.
|
||||
synchronized (mLock) {
|
||||
switch (operation) {
|
||||
case MUTATION_OPERATION_INSERT: {
|
||||
return mSettingsRegistry.insertSettingLocked(SETTINGS_TYPE_GLOBAL,
|
||||
UserHandle.USER_SYSTEM, name, value, tag, makeDefault,
|
||||
getCallingPackage(), forceNotify,
|
||||
callingPackage, forceNotify,
|
||||
CRITICAL_GLOBAL_SETTINGS, overrideableByRestore);
|
||||
}
|
||||
|
||||
@@ -1452,12 +1456,12 @@ public class SettingsProvider extends ContentProvider {
|
||||
case MUTATION_OPERATION_UPDATE: {
|
||||
return mSettingsRegistry.updateSettingLocked(SETTINGS_TYPE_GLOBAL,
|
||||
UserHandle.USER_SYSTEM, name, value, tag, makeDefault,
|
||||
getCallingPackage(), forceNotify, CRITICAL_GLOBAL_SETTINGS);
|
||||
callingPackage, forceNotify, CRITICAL_GLOBAL_SETTINGS);
|
||||
}
|
||||
|
||||
case MUTATION_OPERATION_RESET: {
|
||||
mSettingsRegistry.resetSettingsLocked(SETTINGS_TYPE_GLOBAL,
|
||||
UserHandle.USER_SYSTEM, getCallingPackage(), mode, tag);
|
||||
UserHandle.USER_SYSTEM, callingPackage, mode, tag);
|
||||
} return true;
|
||||
}
|
||||
}
|
||||
@@ -1466,11 +1470,12 @@ public class SettingsProvider extends ContentProvider {
|
||||
}
|
||||
|
||||
private PackageInfo getCallingPackageInfo(int userId) {
|
||||
final String callingPackage = getCallingPackage();
|
||||
try {
|
||||
return mPackageManager.getPackageInfo(getCallingPackage(),
|
||||
return mPackageManager.getPackageInfo(callingPackage,
|
||||
PackageManager.GET_SIGNATURES, userId);
|
||||
} catch (RemoteException e) {
|
||||
throw new IllegalStateException("Package " + getCallingPackage() + " doesn't exist");
|
||||
throw new IllegalStateException("Package " + callingPackage + " doesn't exist");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1720,13 +1725,15 @@ public class SettingsProvider extends ContentProvider {
|
||||
return false;
|
||||
}
|
||||
|
||||
final String callingPackage = getCallingPackage();
|
||||
|
||||
// Mutate the value.
|
||||
synchronized (mLock) {
|
||||
switch (operation) {
|
||||
case MUTATION_OPERATION_INSERT: {
|
||||
return mSettingsRegistry.insertSettingLocked(SETTINGS_TYPE_SECURE,
|
||||
owningUserId, name, value, tag, makeDefault,
|
||||
getCallingPackage(), forceNotify, CRITICAL_SECURE_SETTINGS,
|
||||
callingPackage, forceNotify, CRITICAL_SECURE_SETTINGS,
|
||||
overrideableByRestore);
|
||||
}
|
||||
|
||||
@@ -1738,12 +1745,12 @@ public class SettingsProvider extends ContentProvider {
|
||||
case MUTATION_OPERATION_UPDATE: {
|
||||
return mSettingsRegistry.updateSettingLocked(SETTINGS_TYPE_SECURE,
|
||||
owningUserId, name, value, tag, makeDefault,
|
||||
getCallingPackage(), forceNotify, CRITICAL_SECURE_SETTINGS);
|
||||
callingPackage, forceNotify, CRITICAL_SECURE_SETTINGS);
|
||||
}
|
||||
|
||||
case MUTATION_OPERATION_RESET: {
|
||||
mSettingsRegistry.resetSettingsLocked(SETTINGS_TYPE_SECURE,
|
||||
UserHandle.USER_SYSTEM, getCallingPackage(), mode, tag);
|
||||
UserHandle.USER_SYSTEM, callingPackage, mode, tag);
|
||||
} return true;
|
||||
}
|
||||
}
|
||||
@@ -1840,11 +1847,12 @@ public class SettingsProvider extends ContentProvider {
|
||||
|
||||
private boolean mutateSystemSetting(String name, String value, int runAsUserId, int operation,
|
||||
boolean overrideableByRestore) {
|
||||
final String callingPackage = getCallingPackage();
|
||||
if (!hasWriteSecureSettingsPermission()) {
|
||||
// If the caller doesn't hold WRITE_SECURE_SETTINGS, we verify whether this
|
||||
// operation is allowed for the calling package through appops.
|
||||
if (!Settings.checkAndNoteWriteSettingsOperation(getContext(),
|
||||
Binder.getCallingUid(), getCallingPackage(), getCallingAttributionTag(),
|
||||
Binder.getCallingUid(), callingPackage, getCallingAttributionTag(),
|
||||
true)) {
|
||||
return false;
|
||||
}
|
||||
@@ -1889,7 +1897,7 @@ public class SettingsProvider extends ContentProvider {
|
||||
case MUTATION_OPERATION_INSERT: {
|
||||
validateSystemSettingValue(name, value);
|
||||
return mSettingsRegistry.insertSettingLocked(SETTINGS_TYPE_SYSTEM,
|
||||
owningUserId, name, value, null, false, getCallingPackage(),
|
||||
owningUserId, name, value, null, false, callingPackage,
|
||||
false, null, overrideableByRestore);
|
||||
}
|
||||
|
||||
@@ -1901,7 +1909,7 @@ public class SettingsProvider extends ContentProvider {
|
||||
case MUTATION_OPERATION_UPDATE: {
|
||||
validateSystemSettingValue(name, value);
|
||||
return mSettingsRegistry.updateSettingLocked(SETTINGS_TYPE_SYSTEM,
|
||||
owningUserId, name, value, null, false, getCallingPackage(),
|
||||
owningUserId, name, value, null, false, callingPackage,
|
||||
false, null);
|
||||
}
|
||||
}
|
||||
@@ -2169,14 +2177,15 @@ public class SettingsProvider extends ContentProvider {
|
||||
// user is a system permission and the app must be uninstalled in B and then installed as
|
||||
// an Instant App that situation is not realistic or supported.
|
||||
ApplicationInfo ai = null;
|
||||
final String callingPackage = getCallingPackage();
|
||||
try {
|
||||
ai = mPackageManager.getApplicationInfo(getCallingPackage(), 0
|
||||
ai = mPackageManager.getApplicationInfo(callingPackage, 0
|
||||
, UserHandle.getCallingUserId());
|
||||
} catch (RemoteException ignored) {
|
||||
}
|
||||
if (ai == null) {
|
||||
throw new IllegalStateException("Failed to lookup info for package "
|
||||
+ getCallingPackage());
|
||||
+ callingPackage);
|
||||
}
|
||||
return ai;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user