summaryrefslogtreecommitdiffstats
path: root/services/core/java/com/android/server/job
diff options
context:
space:
mode:
authorChristopher Tate <ctate@google.com>2014-06-18 13:53:31 -0700
committerChristopher Tate <ctate@google.com>2014-06-18 14:02:46 -0700
commit5568f54e14e213ac100cacbbf57689faa6dd3d59 (patch)
treee19d06fd5c5252d13cf854c227a19a4526c9ad7d /services/core/java/com/android/server/job
parent0d8acb2cebe37296c37b4e6507afe44fe5666f90 (diff)
downloadframeworks_base-5568f54e14e213ac100cacbbf57689faa6dd3d59.zip
frameworks_base-5568f54e14e213ac100cacbbf57689faa6dd3d59.tar.gz
frameworks_base-5568f54e14e213ac100cacbbf57689faa6dd3d59.tar.bz2
Fix job service validation in secondary users
Bug 15714663 Change-Id: I101bcc979f30062bec36f462522227b857b58054
Diffstat (limited to 'services/core/java/com/android/server/job')
-rw-r--r--services/core/java/com/android/server/job/JobSchedulerService.java14
1 files changed, 9 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/job/JobSchedulerService.java b/services/core/java/com/android/server/job/JobSchedulerService.java
index 0e9a9cc..cab2728 100644
--- a/services/core/java/com/android/server/job/JobSchedulerService.java
+++ b/services/core/java/com/android/server/job/JobSchedulerService.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import android.app.AppGlobals;
import android.app.job.JobInfo;
import android.app.job.JobScheduler;
import android.app.job.JobService;
@@ -31,8 +32,8 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ServiceInfo;
import android.os.Binder;
import android.os.Handler;
@@ -616,10 +617,13 @@ public class JobSchedulerService extends com.android.server.SystemService
// job that runs one of the app's services, as well as verifying that the
// named service properly requires the BIND_JOB_SERVICE permission
private void enforceValidJobRequest(int uid, JobInfo job) {
- final PackageManager pm = getContext().getPackageManager();
+ final IPackageManager pm = AppGlobals.getPackageManager();
final ComponentName service = job.getService();
try {
- ServiceInfo si = pm.getServiceInfo(service, 0);
+ ServiceInfo si = pm.getServiceInfo(service, 0, UserHandle.getUserId(uid));
+ if (si == null) {
+ throw new IllegalArgumentException("No such service " + service);
+ }
if (si.applicationInfo.uid != uid) {
throw new IllegalArgumentException("uid " + uid +
" cannot schedule job in " + service.getPackageName());
@@ -628,8 +632,8 @@ public class JobSchedulerService extends com.android.server.SystemService
throw new IllegalArgumentException("Scheduled service " + service
+ " does not require android.permission.BIND_JOB_SERVICE permission");
}
- } catch (NameNotFoundException e) {
- throw new IllegalArgumentException("No such service: " + service);
+ } catch (RemoteException e) {
+ // Can't happen; the Package Manager is in this same process
}
}