Merge "Crash app on foreground service notification error." am: 036ea39d96 am: ebf0ccf2dc

am: 7dc7622d5f

Change-Id: Icf725c22df4041be24fc68bdfd854887d3e8c9be
This commit is contained in:
Da Xing
2019-09-06 22:22:01 -07:00
committed by android-build-merger

View File

@@ -901,8 +901,22 @@ public class NotificationManagerService extends SystemService {
@Override @Override
public void onNotificationError(int callingUid, int callingPid, String pkg, String tag, public void onNotificationError(int callingUid, int callingPid, String pkg, String tag,
int id, int uid, int initialPid, String message, int userId) { int id, int uid, int initialPid, String message, int userId) {
final boolean fgService;
synchronized (mNotificationLock) {
NotificationRecord r = findNotificationLocked(pkg, tag, id, userId);
fgService = r != null && (r.getNotification().flags & FLAG_FOREGROUND_SERVICE) != 0;
}
cancelNotification(callingUid, callingPid, pkg, tag, id, 0, 0, false, userId, cancelNotification(callingUid, callingPid, pkg, tag, id, 0, 0, false, userId,
REASON_ERROR, null); REASON_ERROR, null);
if (fgService) {
// Still crash for foreground services, preventing the not-crash behaviour abused
// by apps to give us a garbage notification and silently start a fg service.
Binder.withCleanCallingIdentity(
() -> mAm.crashApplication(uid, initialPid, pkg, -1,
"Bad notification(tag=" + tag + ", id=" + id + ") posted from package "
+ pkg + ", crashing app(uid=" + uid + ", pid=" + initialPid + "): "
+ message));
}
} }
@Override @Override