Merge "Fix issue #31403654: Elevation of privilege vulnerability in deviceidle service" into nyc-mr1-dev

This commit is contained in:
Dianne Hackborn
2016-10-03 20:21:49 +00:00
committed by Android (Google) Code Review

View File

@@ -2726,12 +2726,12 @@ public class DeviceIdleController extends SystemService
} }
} }
} else if ("whitelist".equals(cmd)) { } else if ("whitelist".equals(cmd)) {
long token = Binder.clearCallingIdentity(); String arg = shell.getNextArg();
try { if (arg != null) {
String arg = shell.getNextArg(); getContext().enforceCallingOrSelfPermission(
if (arg != null) { android.Manifest.permission.DEVICE_POWER, null);
getContext().enforceCallingOrSelfPermission( long token = Binder.clearCallingIdentity();
android.Manifest.permission.DEVICE_POWER, null); try {
do { do {
if (arg.length() < 1 || (arg.charAt(0) != '-' if (arg.length() < 1 || (arg.charAt(0) != '-'
&& arg.charAt(0) != '+' && arg.charAt(0) != '=')) { && arg.charAt(0) != '+' && arg.charAt(0) != '=')) {
@@ -2754,30 +2754,30 @@ public class DeviceIdleController extends SystemService
pw.println(getPowerSaveWhitelistAppInternal(pkg)); pw.println(getPowerSaveWhitelistAppInternal(pkg));
} }
} while ((arg=shell.getNextArg()) != null); } while ((arg=shell.getNextArg()) != null);
} else { } finally {
synchronized (this) { Binder.restoreCallingIdentity(token);
for (int j=0; j<mPowerSaveWhitelistAppsExceptIdle.size(); j++) { }
pw.print("system-excidle,"); } else {
pw.print(mPowerSaveWhitelistAppsExceptIdle.keyAt(j)); synchronized (this) {
pw.print(","); for (int j=0; j<mPowerSaveWhitelistAppsExceptIdle.size(); j++) {
pw.println(mPowerSaveWhitelistAppsExceptIdle.valueAt(j)); pw.print("system-excidle,");
} pw.print(mPowerSaveWhitelistAppsExceptIdle.keyAt(j));
for (int j=0; j<mPowerSaveWhitelistApps.size(); j++) { pw.print(",");
pw.print("system,"); pw.println(mPowerSaveWhitelistAppsExceptIdle.valueAt(j));
pw.print(mPowerSaveWhitelistApps.keyAt(j)); }
pw.print(","); for (int j=0; j<mPowerSaveWhitelistApps.size(); j++) {
pw.println(mPowerSaveWhitelistApps.valueAt(j)); pw.print("system,");
} pw.print(mPowerSaveWhitelistApps.keyAt(j));
for (int j=0; j<mPowerSaveWhitelistUserApps.size(); j++) { pw.print(",");
pw.print("user,"); pw.println(mPowerSaveWhitelistApps.valueAt(j));
pw.print(mPowerSaveWhitelistUserApps.keyAt(j)); }
pw.print(","); for (int j=0; j<mPowerSaveWhitelistUserApps.size(); j++) {
pw.println(mPowerSaveWhitelistUserApps.valueAt(j)); pw.print("user,");
} pw.print(mPowerSaveWhitelistUserApps.keyAt(j));
pw.print(",");
pw.println(mPowerSaveWhitelistUserApps.valueAt(j));
} }
} }
} finally {
Binder.restoreCallingIdentity(token);
} }
} else if ("tempwhitelist".equals(cmd)) { } else if ("tempwhitelist".equals(cmd)) {
String opt; String opt;