summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristopher Tate <ctate@google.com>2014-06-19 00:35:51 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-06-18 19:24:54 +0000
commit80888cb20657d841de6e66601e9bd74a942734ef (patch)
tree2ea97958cfc1e260c3d60c259705481f9f978f88
parent3bbd9be166fecc5c333f49e18a2f46c7355472cd (diff)
parent5568f54e14e213ac100cacbbf57689faa6dd3d59 (diff)
downloadframeworks_base-80888cb20657d841de6e66601e9bd74a942734ef.zip
frameworks_base-80888cb20657d841de6e66601e9bd74a942734ef.tar.gz
frameworks_base-80888cb20657d841de6e66601e9bd74a942734ef.tar.bz2
Merge "Fix job service validation in secondary users"
-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
}
}