summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorKenny Guy <kennyguy@google.com>2014-07-17 13:01:25 +0100
committerKenny Guy <kennyguy@google.com>2014-07-17 12:14:13 +0000
commit2df1892f411de6fa93ba487e3c4d23a079b74fcb (patch)
treea58e04ec34fccb0341714e278ddb56303dd76775 /services
parent9d32507a8608f82d430fcaf1de0eb81de93dcdea (diff)
downloadframeworks_base-2df1892f411de6fa93ba487e3c4d23a079b74fcb.zip
frameworks_base-2df1892f411de6fa93ba487e3c4d23a079b74fcb.tar.gz
frameworks_base-2df1892f411de6fa93ba487e3c4d23a079b74fcb.tar.bz2
Check for exported and category before starting activity.
Make LauncherAppService check that component passed to startActivityAsUser is exported and has the category Intent.CATEGORY_LAUNCHER before starting it. Bug: 15989072 Change-Id: I29d03fae49ff0ca8d7f7524f5e71895d62ff3cae
Diffstat (limited to 'services')
-rw-r--r--services/core/java/com/android/server/pm/LauncherAppsService.java30
1 files changed, 28 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java
index 65cb6c9..09cf392 100644
--- a/services/core/java/com/android/server/pm/LauncherAppsService.java
+++ b/services/core/java/com/android/server/pm/LauncherAppsService.java
@@ -269,13 +269,39 @@ public class LauncherAppsService extends SystemService {
Intent launchIntent = new Intent(Intent.ACTION_MAIN);
launchIntent.addCategory(Intent.CATEGORY_LAUNCHER);
- launchIntent.setComponent(component);
launchIntent.setSourceBounds(sourceBounds);
launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ launchIntent.setPackage(component.getPackageName());
long ident = Binder.clearCallingIdentity();
try {
- mContext.startActivityAsUser(launchIntent, opts, user);
+ IPackageManager pm = AppGlobals.getPackageManager();
+ ActivityInfo info = pm.getActivityInfo(component, 0, user.getIdentifier());
+ if (!info.exported) {
+ throw new SecurityException("Cannot launch non-exported components "
+ + component);
+ }
+
+ // Check that the component actually has Intent.CATEGORY_LAUCNCHER
+ // as calling startActivityAsUser ignores the category and just
+ // resolves based on the component if present.
+ List<ResolveInfo> apps = mPm.queryIntentActivitiesAsUser(launchIntent,
+ PackageManager.NO_CROSS_PROFILE, // We only want the apps for this user
+ user.getIdentifier());
+ final int size = apps.size();
+ for (int i = 0; i < size; ++i) {
+ ActivityInfo activityInfo = apps.get(i).activityInfo;
+ if (activityInfo.packageName.equals(component.getPackageName()) &&
+ activityInfo.name.equals(component.getClassName())) {
+ // Found an activity with category launcher that matches
+ // this component so ok to launch.
+ launchIntent.setComponent(component);
+ mContext.startActivityAsUser(launchIntent, opts, user);
+ return;
+ }
+ }
+ throw new SecurityException("Attempt to launch activity without "
+ + " category Intent.CATEGORY_LAUNCHER " + component);
} finally {
Binder.restoreCallingIdentity(ident);
}