Fix issue #31403654: Elevation of privilege vulnerability in deviceidle service

am: eb909e3cda

Change-Id: Ibbc6447d97c54b7393e557a831f0767edaea9b40
This commit is contained in:
Dianne Hackborn
2016-10-06 20:07:41 +00:00
committed by android-build-merger

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;