Loading services/core/java/com/android/server/pm/PackageManagerService.java +57 −23 Original line number Original line Diff line number Diff line Loading @@ -6833,12 +6833,16 @@ public class PackageManagerService extends IPackageManager.Stub final boolean isTargetHiddenFromInstantApp = final boolean isTargetHiddenFromInstantApp = !isTargetVisibleToInstantApp !isTargetVisibleToInstantApp || (matchExplicitlyVisibleOnly && !isTargetExplicitlyVisibleToInstantApp); || (matchExplicitlyVisibleOnly && !isTargetExplicitlyVisibleToInstantApp); final boolean blockResolution = final boolean blockInstantResolution = !isTargetSameInstantApp !isTargetSameInstantApp && ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp) && ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp) || (matchVisibleToInstantAppOnly && isCallerInstantApp || (matchVisibleToInstantAppOnly && isCallerInstantApp && isTargetHiddenFromInstantApp)); && isTargetHiddenFromInstantApp)); if (!blockResolution) { final boolean blockNormalResolution = !isTargetInstantApp && !isCallerInstantApp && !resolveForStart && shouldFilterApplicationLocked( getPackageSettingInternal(ai.applicationInfo.packageName, Process.SYSTEM_UID), filterCallingUid, userId); if (!blockInstantResolution && !blockNormalResolution) { final ResolveInfo ri = new ResolveInfo(); final ResolveInfo ri = new ResolveInfo(); ri.activityInfo = ai; ri.activityInfo = ai; list.add(ri); list.add(ri); Loading Loading @@ -7222,9 +7226,17 @@ public class PackageManagerService extends IPackageManager.Stub resolveInfos.set(i, installerInfo); resolveInfos.set(i, installerInfo); continue; continue; } } // caller is a full app, don't need to apply any other filtering // caller is a full app if (ephemeralPkgName == null) { if (ephemeralPkgName == null) { SettingBase callingSetting = mSettings.getSettingLPr(UserHandle.getAppId(filterCallingUid)); PackageSetting resolvedSetting = getPackageSettingInternal(info.activityInfo.packageName, 0); if (resolveForStart || !mAppsFilter.shouldFilterApplication( filterCallingUid, callingSetting, resolvedSetting, userId)) { continue; continue; } } else if (ephemeralPkgName.equals(info.activityInfo.packageName)) { } else if (ephemeralPkgName.equals(info.activityInfo.packageName)) { // caller is same app; don't need to apply any other filtering // caller is same app; don't need to apply any other filtering continue; continue; Loading Loading @@ -7914,12 +7926,17 @@ public class PackageManagerService extends IPackageManager.Stub & ApplicationInfo.PRIVATE_FLAG_INSTANT) != 0; & ApplicationInfo.PRIVATE_FLAG_INSTANT) != 0; final boolean isTargetHiddenFromInstantApp = final boolean isTargetHiddenFromInstantApp = (si.flags & ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP) == 0; (si.flags & ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP) == 0; final boolean blockResolution = final boolean blockInstantResolution = !isTargetSameInstantApp !isTargetSameInstantApp && ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp) && ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp) || (matchVisibleToInstantAppOnly && isCallerInstantApp || (matchVisibleToInstantAppOnly && isCallerInstantApp && isTargetHiddenFromInstantApp)); && isTargetHiddenFromInstantApp)); if (!blockResolution) { final boolean blockNormalResolution = !isTargetInstantApp && !isCallerInstantApp && shouldFilterApplicationLocked( getPackageSettingInternal(si.applicationInfo.packageName, Process.SYSTEM_UID), callingUid, userId); if (!blockInstantResolution && !blockNormalResolution) { final ResolveInfo ri = new ResolveInfo(); final ResolveInfo ri = new ResolveInfo(); ri.serviceInfo = si; ri.serviceInfo = si; list.add(ri); list.add(ri); Loading @@ -7938,8 +7955,7 @@ public class PackageManagerService extends IPackageManager.Stub return Collections.emptyList(); return Collections.emptyList(); } } return applyPostServiceResolutionFilter( return applyPostServiceResolutionFilter( resolveInfos, resolveInfos, instantAppPkgName, userId, callingUid); instantAppPkgName); } } final AndroidPackage pkg = mPackages.get(pkgName); final AndroidPackage pkg = mPackages.get(pkgName); if (pkg != null) { if (pkg != null) { Loading @@ -7950,20 +7966,26 @@ public class PackageManagerService extends IPackageManager.Stub return Collections.emptyList(); return Collections.emptyList(); } } return applyPostServiceResolutionFilter( return applyPostServiceResolutionFilter( resolveInfos, resolveInfos, instantAppPkgName, userId, callingUid); instantAppPkgName); } } return Collections.emptyList(); return Collections.emptyList(); } } } } private List<ResolveInfo> applyPostServiceResolutionFilter(List<ResolveInfo> resolveInfos, private List<ResolveInfo> applyPostServiceResolutionFilter(List<ResolveInfo> resolveInfos, String instantAppPkgName) { String instantAppPkgName, @UserIdInt int userId, int filterCallingUid) { if (instantAppPkgName == null) { return resolveInfos; } for (int i = resolveInfos.size() - 1; i >= 0; i--) { for (int i = resolveInfos.size() - 1; i >= 0; i--) { final ResolveInfo info = resolveInfos.get(i); final ResolveInfo info = resolveInfos.get(i); if (instantAppPkgName == null) { SettingBase callingSetting = mSettings.getSettingLPr(UserHandle.getAppId(filterCallingUid)); PackageSetting resolvedSetting = getPackageSettingInternal(info.serviceInfo.packageName, 0); if (!mAppsFilter.shouldFilterApplication( filterCallingUid, callingSetting, resolvedSetting, userId)) { continue; } } final boolean isEphemeralApp = info.serviceInfo.applicationInfo.isInstantApp(); final boolean isEphemeralApp = info.serviceInfo.applicationInfo.isInstantApp(); // allow services that are defined in the provided package // allow services that are defined in the provided package if (isEphemeralApp && instantAppPkgName.equals(info.serviceInfo.packageName)) { if (isEphemeralApp && instantAppPkgName.equals(info.serviceInfo.packageName)) { Loading Loading @@ -8046,7 +8068,11 @@ public class PackageManagerService extends IPackageManager.Stub && ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp) && ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp) || (matchVisibleToInstantAppOnly && isCallerInstantApp || (matchVisibleToInstantAppOnly && isCallerInstantApp && isTargetHiddenFromInstantApp)); && isTargetHiddenFromInstantApp)); if (!blockResolution) { final boolean blockNormalResolution = !isTargetInstantApp && !isCallerInstantApp && shouldFilterApplicationLocked( getPackageSettingInternal(pi.applicationInfo.packageName, Process.SYSTEM_UID), callingUid, userId); if (!blockResolution && !blockNormalResolution) { final ResolveInfo ri = new ResolveInfo(); final ResolveInfo ri = new ResolveInfo(); ri.providerInfo = pi; ri.providerInfo = pi; list.add(ri); list.add(ri); Loading @@ -8065,8 +8091,7 @@ public class PackageManagerService extends IPackageManager.Stub return Collections.emptyList(); return Collections.emptyList(); } } return applyPostContentProviderResolutionFilter( return applyPostContentProviderResolutionFilter( resolveInfos, resolveInfos, instantAppPkgName, userId, callingUid); instantAppPkgName); } } final AndroidPackage pkg = mPackages.get(pkgName); final AndroidPackage pkg = mPackages.get(pkgName); if (pkg != null) { if (pkg != null) { Loading @@ -8077,20 +8102,29 @@ public class PackageManagerService extends IPackageManager.Stub return Collections.emptyList(); return Collections.emptyList(); } } return applyPostContentProviderResolutionFilter( return applyPostContentProviderResolutionFilter( resolveInfos, resolveInfos, instantAppPkgName, userId, callingUid); instantAppPkgName); } } return Collections.emptyList(); return Collections.emptyList(); } } } } private List<ResolveInfo> applyPostContentProviderResolutionFilter( private List<ResolveInfo> applyPostContentProviderResolutionFilter( List<ResolveInfo> resolveInfos, String instantAppPkgName) { List<ResolveInfo> resolveInfos, String instantAppPkgName, if (instantAppPkgName == null) { @UserIdInt int userId, int callingUid) { return resolveInfos; } for (int i = resolveInfos.size() - 1; i >= 0; i--) { for (int i = resolveInfos.size() - 1; i >= 0; i--) { final ResolveInfo info = resolveInfos.get(i); final ResolveInfo info = resolveInfos.get(i); if (instantAppPkgName == null) { SettingBase callingSetting = mSettings.getSettingLPr(UserHandle.getAppId(callingUid)); PackageSetting resolvedSetting = getPackageSettingInternal(info.providerInfo.packageName, 0); if (!mAppsFilter.shouldFilterApplication( callingUid, callingSetting, resolvedSetting, userId)) { continue; } } final boolean isEphemeralApp = info.providerInfo.applicationInfo.isInstantApp(); final boolean isEphemeralApp = info.providerInfo.applicationInfo.isInstantApp(); // allow providers that are defined in the provided package // allow providers that are defined in the provided package if (isEphemeralApp && instantAppPkgName.equals(info.providerInfo.packageName)) { if (isEphemeralApp && instantAppPkgName.equals(info.providerInfo.packageName)) { Loading
services/core/java/com/android/server/pm/PackageManagerService.java +57 −23 Original line number Original line Diff line number Diff line Loading @@ -6833,12 +6833,16 @@ public class PackageManagerService extends IPackageManager.Stub final boolean isTargetHiddenFromInstantApp = final boolean isTargetHiddenFromInstantApp = !isTargetVisibleToInstantApp !isTargetVisibleToInstantApp || (matchExplicitlyVisibleOnly && !isTargetExplicitlyVisibleToInstantApp); || (matchExplicitlyVisibleOnly && !isTargetExplicitlyVisibleToInstantApp); final boolean blockResolution = final boolean blockInstantResolution = !isTargetSameInstantApp !isTargetSameInstantApp && ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp) && ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp) || (matchVisibleToInstantAppOnly && isCallerInstantApp || (matchVisibleToInstantAppOnly && isCallerInstantApp && isTargetHiddenFromInstantApp)); && isTargetHiddenFromInstantApp)); if (!blockResolution) { final boolean blockNormalResolution = !isTargetInstantApp && !isCallerInstantApp && !resolveForStart && shouldFilterApplicationLocked( getPackageSettingInternal(ai.applicationInfo.packageName, Process.SYSTEM_UID), filterCallingUid, userId); if (!blockInstantResolution && !blockNormalResolution) { final ResolveInfo ri = new ResolveInfo(); final ResolveInfo ri = new ResolveInfo(); ri.activityInfo = ai; ri.activityInfo = ai; list.add(ri); list.add(ri); Loading Loading @@ -7222,9 +7226,17 @@ public class PackageManagerService extends IPackageManager.Stub resolveInfos.set(i, installerInfo); resolveInfos.set(i, installerInfo); continue; continue; } } // caller is a full app, don't need to apply any other filtering // caller is a full app if (ephemeralPkgName == null) { if (ephemeralPkgName == null) { SettingBase callingSetting = mSettings.getSettingLPr(UserHandle.getAppId(filterCallingUid)); PackageSetting resolvedSetting = getPackageSettingInternal(info.activityInfo.packageName, 0); if (resolveForStart || !mAppsFilter.shouldFilterApplication( filterCallingUid, callingSetting, resolvedSetting, userId)) { continue; continue; } } else if (ephemeralPkgName.equals(info.activityInfo.packageName)) { } else if (ephemeralPkgName.equals(info.activityInfo.packageName)) { // caller is same app; don't need to apply any other filtering // caller is same app; don't need to apply any other filtering continue; continue; Loading Loading @@ -7914,12 +7926,17 @@ public class PackageManagerService extends IPackageManager.Stub & ApplicationInfo.PRIVATE_FLAG_INSTANT) != 0; & ApplicationInfo.PRIVATE_FLAG_INSTANT) != 0; final boolean isTargetHiddenFromInstantApp = final boolean isTargetHiddenFromInstantApp = (si.flags & ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP) == 0; (si.flags & ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP) == 0; final boolean blockResolution = final boolean blockInstantResolution = !isTargetSameInstantApp !isTargetSameInstantApp && ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp) && ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp) || (matchVisibleToInstantAppOnly && isCallerInstantApp || (matchVisibleToInstantAppOnly && isCallerInstantApp && isTargetHiddenFromInstantApp)); && isTargetHiddenFromInstantApp)); if (!blockResolution) { final boolean blockNormalResolution = !isTargetInstantApp && !isCallerInstantApp && shouldFilterApplicationLocked( getPackageSettingInternal(si.applicationInfo.packageName, Process.SYSTEM_UID), callingUid, userId); if (!blockInstantResolution && !blockNormalResolution) { final ResolveInfo ri = new ResolveInfo(); final ResolveInfo ri = new ResolveInfo(); ri.serviceInfo = si; ri.serviceInfo = si; list.add(ri); list.add(ri); Loading @@ -7938,8 +7955,7 @@ public class PackageManagerService extends IPackageManager.Stub return Collections.emptyList(); return Collections.emptyList(); } } return applyPostServiceResolutionFilter( return applyPostServiceResolutionFilter( resolveInfos, resolveInfos, instantAppPkgName, userId, callingUid); instantAppPkgName); } } final AndroidPackage pkg = mPackages.get(pkgName); final AndroidPackage pkg = mPackages.get(pkgName); if (pkg != null) { if (pkg != null) { Loading @@ -7950,20 +7966,26 @@ public class PackageManagerService extends IPackageManager.Stub return Collections.emptyList(); return Collections.emptyList(); } } return applyPostServiceResolutionFilter( return applyPostServiceResolutionFilter( resolveInfos, resolveInfos, instantAppPkgName, userId, callingUid); instantAppPkgName); } } return Collections.emptyList(); return Collections.emptyList(); } } } } private List<ResolveInfo> applyPostServiceResolutionFilter(List<ResolveInfo> resolveInfos, private List<ResolveInfo> applyPostServiceResolutionFilter(List<ResolveInfo> resolveInfos, String instantAppPkgName) { String instantAppPkgName, @UserIdInt int userId, int filterCallingUid) { if (instantAppPkgName == null) { return resolveInfos; } for (int i = resolveInfos.size() - 1; i >= 0; i--) { for (int i = resolveInfos.size() - 1; i >= 0; i--) { final ResolveInfo info = resolveInfos.get(i); final ResolveInfo info = resolveInfos.get(i); if (instantAppPkgName == null) { SettingBase callingSetting = mSettings.getSettingLPr(UserHandle.getAppId(filterCallingUid)); PackageSetting resolvedSetting = getPackageSettingInternal(info.serviceInfo.packageName, 0); if (!mAppsFilter.shouldFilterApplication( filterCallingUid, callingSetting, resolvedSetting, userId)) { continue; } } final boolean isEphemeralApp = info.serviceInfo.applicationInfo.isInstantApp(); final boolean isEphemeralApp = info.serviceInfo.applicationInfo.isInstantApp(); // allow services that are defined in the provided package // allow services that are defined in the provided package if (isEphemeralApp && instantAppPkgName.equals(info.serviceInfo.packageName)) { if (isEphemeralApp && instantAppPkgName.equals(info.serviceInfo.packageName)) { Loading Loading @@ -8046,7 +8068,11 @@ public class PackageManagerService extends IPackageManager.Stub && ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp) && ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp) || (matchVisibleToInstantAppOnly && isCallerInstantApp || (matchVisibleToInstantAppOnly && isCallerInstantApp && isTargetHiddenFromInstantApp)); && isTargetHiddenFromInstantApp)); if (!blockResolution) { final boolean blockNormalResolution = !isTargetInstantApp && !isCallerInstantApp && shouldFilterApplicationLocked( getPackageSettingInternal(pi.applicationInfo.packageName, Process.SYSTEM_UID), callingUid, userId); if (!blockResolution && !blockNormalResolution) { final ResolveInfo ri = new ResolveInfo(); final ResolveInfo ri = new ResolveInfo(); ri.providerInfo = pi; ri.providerInfo = pi; list.add(ri); list.add(ri); Loading @@ -8065,8 +8091,7 @@ public class PackageManagerService extends IPackageManager.Stub return Collections.emptyList(); return Collections.emptyList(); } } return applyPostContentProviderResolutionFilter( return applyPostContentProviderResolutionFilter( resolveInfos, resolveInfos, instantAppPkgName, userId, callingUid); instantAppPkgName); } } final AndroidPackage pkg = mPackages.get(pkgName); final AndroidPackage pkg = mPackages.get(pkgName); if (pkg != null) { if (pkg != null) { Loading @@ -8077,20 +8102,29 @@ public class PackageManagerService extends IPackageManager.Stub return Collections.emptyList(); return Collections.emptyList(); } } return applyPostContentProviderResolutionFilter( return applyPostContentProviderResolutionFilter( resolveInfos, resolveInfos, instantAppPkgName, userId, callingUid); instantAppPkgName); } } return Collections.emptyList(); return Collections.emptyList(); } } } } private List<ResolveInfo> applyPostContentProviderResolutionFilter( private List<ResolveInfo> applyPostContentProviderResolutionFilter( List<ResolveInfo> resolveInfos, String instantAppPkgName) { List<ResolveInfo> resolveInfos, String instantAppPkgName, if (instantAppPkgName == null) { @UserIdInt int userId, int callingUid) { return resolveInfos; } for (int i = resolveInfos.size() - 1; i >= 0; i--) { for (int i = resolveInfos.size() - 1; i >= 0; i--) { final ResolveInfo info = resolveInfos.get(i); final ResolveInfo info = resolveInfos.get(i); if (instantAppPkgName == null) { SettingBase callingSetting = mSettings.getSettingLPr(UserHandle.getAppId(callingUid)); PackageSetting resolvedSetting = getPackageSettingInternal(info.providerInfo.packageName, 0); if (!mAppsFilter.shouldFilterApplication( callingUid, callingSetting, resolvedSetting, userId)) { continue; } } final boolean isEphemeralApp = info.providerInfo.applicationInfo.isInstantApp(); final boolean isEphemeralApp = info.providerInfo.applicationInfo.isInstantApp(); // allow providers that are defined in the provided package // allow providers that are defined in the provided package if (isEphemeralApp && instantAppPkgName.equals(info.providerInfo.packageName)) { if (isEphemeralApp && instantAppPkgName.equals(info.providerInfo.packageName)) {