Enforce MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE permission

Bug: 150877732
Test: 1. atest SettingsProviderTest
      2. atest PreservedSettingsRestoreHostSideTest (with
      MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE granted to shell)
Change-Id: I5536233b2084a31161185235195e2a6b25b4c3d1
This commit is contained in:
Ruslan Tkhakokhov
2020-03-10 20:39:59 +00:00
parent b01a5d5e22
commit 71888e5fa1
2 changed files with 7 additions and 1 deletions

View File

@@ -98,7 +98,8 @@ import java.util.Set;
* The Settings provider contains global system-level device preferences.
*/
public final class Settings {
private static final boolean DEFAULT_OVERRIDEABLE_BY_RESTORE = false;
/** @hide */
public static final boolean DEFAULT_OVERRIDEABLE_BY_RESTORE = false;
// Intent actions for Settings

View File

@@ -2778,6 +2778,11 @@ public class SettingsProvider extends ContentProvider {
public boolean insertSettingLocked(int type, int userId, String name, String value,
String tag, boolean makeDefault, boolean forceNonSystemPackage, String packageName,
boolean forceNotify, Set<String> criticalSettings, boolean overrideableByRestore) {
if (overrideableByRestore != Settings.DEFAULT_OVERRIDEABLE_BY_RESTORE) {
getContext().enforceCallingOrSelfPermission(
Manifest.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE,
"Caller is not allowed to modify settings overrideable by restore");
}
final int key = makeKey(type, userId);
boolean success = false;