diff options
author | Christopher Tate <ctate@google.com> | 2014-06-18 13:53:31 -0700 |
---|---|---|
committer | Christopher Tate <ctate@google.com> | 2014-06-18 14:02:46 -0700 |
commit | 5568f54e14e213ac100cacbbf57689faa6dd3d59 (patch) | |
tree | e19d06fd5c5252d13cf854c227a19a4526c9ad7d /services/core/java/com/android/server/job | |
parent | 0d8acb2cebe37296c37b4e6507afe44fe5666f90 (diff) | |
download | frameworks_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.java | 14 |
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 } } |