From: Christopher Tate Date: Thu, 27 Apr 2017 18:22:15 +0000 (-0700) Subject: Fix 'jobscheduler run' shell command X-Git-Tag: android-x86-9.0-r1~1044^2~1318^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=851a35abe856be6d33917be979628e64e3c019e5;p=android-x86%2Fframeworks-base.git Fix 'jobscheduler run' shell command Tidying up the locking + deferred-work shape of the job scheduler's internal flow inadvertently meant that we were now trying to bind to a job service while under the shell user's uid when the relevant shell command was used to kick off the job. Now we don't do that. Bug 37744607 Test: manual Change-Id: Ia4b83f83f9fbd2e5678eaa279f1d86206fb05023 --- diff --git a/services/core/java/com/android/server/job/JobSchedulerShellCommand.java b/services/core/java/com/android/server/job/JobSchedulerShellCommand.java index 848704ec58c4..1c31c3e6af96 100644 --- a/services/core/java/com/android/server/job/JobSchedulerShellCommand.java +++ b/services/core/java/com/android/server/job/JobSchedulerShellCommand.java @@ -109,44 +109,49 @@ public class JobSchedulerShellCommand extends ShellCommand { final String pkgName = getNextArgRequired(); final int jobId = Integer.parseInt(getNextArgRequired()); - int ret = mInternal.executeRunCommand(pkgName, userId, jobId, force); - switch (ret) { - case CMD_ERR_NO_PACKAGE: - pw.print("Package not found: "); - pw.print(pkgName); - pw.print(" / user "); - pw.println(userId); - break; - - case CMD_ERR_NO_JOB: - pw.print("Could not find job "); - pw.print(jobId); - pw.print(" in package "); - pw.print(pkgName); - pw.print(" / user "); - pw.println(userId); - break; - - case CMD_ERR_CONSTRAINTS: - pw.print("Job "); - pw.print(jobId); - pw.print(" in package "); - pw.print(pkgName); - pw.print(" / user "); - pw.print(userId); - pw.println(" has functional constraints but --force not specified"); - break; - - default: - // success! - pw.print("Running job"); - if (force) { - pw.print(" [FORCED]"); - } - pw.println(); - break; + final long ident = Binder.clearCallingIdentity(); + try { + int ret = mInternal.executeRunCommand(pkgName, userId, jobId, force); + switch (ret) { + case CMD_ERR_NO_PACKAGE: + pw.print("Package not found: "); + pw.print(pkgName); + pw.print(" / user "); + pw.println(userId); + break; + + case CMD_ERR_NO_JOB: + pw.print("Could not find job "); + pw.print(jobId); + pw.print(" in package "); + pw.print(pkgName); + pw.print(" / user "); + pw.println(userId); + break; + + case CMD_ERR_CONSTRAINTS: + pw.print("Job "); + pw.print(jobId); + pw.print(" in package "); + pw.print(pkgName); + pw.print(" / user "); + pw.print(userId); + pw.println(" has functional constraints but --force not specified"); + break; + + default: + // success! + pw.print("Running job"); + if (force) { + pw.print(" [FORCED]"); + } + pw.println(); + break; + } + return ret; + } finally { + Binder.restoreCallingIdentity(ident); } - return ret; } private int runMonitorBattery(PrintWriter pw) throws Exception {