Limit Instant App notifications
Instants apps are not allowed to create toasts or notifications, however they are allowed to update notifications that were created by the system for them (i.e. a notification for a foreground service). Test: Manually verified that .notify() fails with a security exception Test: Manually verified startForeground shows a notification and that it can be updated. Change-Id: I054cccc2aa817263d15abd34851b0e06f16fb829
This commit is contained in:
@@ -1434,6 +1434,11 @@ public class NotificationManagerService extends SystemService {
|
||||
return ;
|
||||
}
|
||||
|
||||
if (isCallerInstantApp(pkg)) {
|
||||
throw new SecurityException("Instant app " + pkg
|
||||
+ " is not allowed to create toasts");
|
||||
}
|
||||
|
||||
final boolean isSystemToast = isCallerSystem() || ("android".equals(pkg));
|
||||
final boolean isPackageSuspended =
|
||||
isPackageSuspendedForUser(pkg, Binder.getCallingUid());
|
||||
@@ -3052,6 +3057,13 @@ public class NotificationManagerService extends SystemService {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
} else if (isCallerInstantApp(pkg)) {
|
||||
// Ephemeral apps have some special contraints for notifications.
|
||||
// They are not allowed to create new notifications however they are allowed to
|
||||
// update notifications created by the system (e.g. a foreground service
|
||||
// notification).
|
||||
throw new SecurityException("Instant app " + pkg
|
||||
+ " cannot create notifications");
|
||||
}
|
||||
|
||||
int count = 0;
|
||||
@@ -4326,6 +4338,27 @@ public class NotificationManagerService extends SystemService {
|
||||
checkCallerIsSameApp(pkg);
|
||||
}
|
||||
|
||||
private boolean isCallerInstantApp(String pkg) {
|
||||
// System is always allowed to act for ephemeral apps.
|
||||
if (isCallerSystem()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
mAppOps.checkPackage(Binder.getCallingUid(), pkg);
|
||||
|
||||
try {
|
||||
ApplicationInfo ai = mPackageManager.getApplicationInfo(pkg, 0,
|
||||
UserHandle.getCallingUserId());
|
||||
if (ai == null) {
|
||||
throw new SecurityException("Unknown package " + pkg);
|
||||
}
|
||||
return ai.isInstantApp();
|
||||
} catch (RemoteException re) {
|
||||
throw new SecurityException("Unknown package " + pkg, re);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void checkCallerIsSameApp(String pkg) {
|
||||
final int uid = Binder.getCallingUid();
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user