From 4c184b2e087db8a5b9ba54ffef060db91c97e40b Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Mon, 28 Dec 2020 10:44:20 +0000 Subject: [PATCH] Mark PendingIntents created in NPMS as immutable. Fixes: 173722125 Test: manual Change-Id: Ia83029151795d4d5563c4130680da0e13798462d --- .../net/NetworkPolicyManagerService.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 38ffccda5d682..0e7b4b8c9c5ed 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -27,6 +27,8 @@ import static android.Manifest.permission.OBSERVE_NETWORK_POLICY; import static android.Manifest.permission.READ_NETWORK_USAGE_HISTORY; import static android.Manifest.permission.READ_PHONE_STATE; import static android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE; +import static android.app.PendingIntent.FLAG_IMMUTABLE; +import static android.app.PendingIntent.FLAG_UPDATE_CURRENT; import static android.content.Intent.ACTION_PACKAGE_ADDED; import static android.content.Intent.ACTION_UID_REMOVED; import static android.content.Intent.ACTION_USER_ADDED; @@ -1429,17 +1431,17 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { final Intent snoozeIntent = buildSnoozeWarningIntent(policy.template); builder.setDeleteIntent(PendingIntent.getBroadcast( - mContext, 0, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT)); + mContext, 0, snoozeIntent, FLAG_UPDATE_CURRENT | FLAG_IMMUTABLE)); final Intent viewIntent = buildViewDataUsageIntent(res, policy.template); // TODO: Resolve to single code path. if (UserManager.isHeadlessSystemUserMode()) { builder.setContentIntent(PendingIntent.getActivityAsUser( - mContext, 0, viewIntent, PendingIntent.FLAG_UPDATE_CURRENT, + mContext, 0, viewIntent, FLAG_UPDATE_CURRENT | FLAG_IMMUTABLE, /* options= */ null, UserHandle.CURRENT)); } else { builder.setContentIntent(PendingIntent.getActivity( - mContext, 0, viewIntent, PendingIntent.FLAG_UPDATE_CURRENT)); + mContext, 0, viewIntent, FLAG_UPDATE_CURRENT | FLAG_IMMUTABLE)); } break; } @@ -1463,11 +1465,11 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { // TODO: Resolve to single code path. if (UserManager.isHeadlessSystemUserMode()) { builder.setContentIntent(PendingIntent.getActivityAsUser( - mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT, + mContext, 0, intent, FLAG_UPDATE_CURRENT | FLAG_IMMUTABLE, /* options= */ null, UserHandle.CURRENT)); } else { builder.setContentIntent(PendingIntent.getActivity( - mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)); + mContext, 0, intent, FLAG_UPDATE_CURRENT | FLAG_IMMUTABLE)); } break; } @@ -1494,11 +1496,11 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { // TODO: Resolve to single code path. if (UserManager.isHeadlessSystemUserMode()) { builder.setContentIntent(PendingIntent.getActivityAsUser( - mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT, + mContext, 0, intent, FLAG_UPDATE_CURRENT | FLAG_IMMUTABLE, /* options= */ null, UserHandle.CURRENT)); } else { builder.setContentIntent(PendingIntent.getActivity( - mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)); + mContext, 0, intent, FLAG_UPDATE_CURRENT | FLAG_IMMUTABLE)); } break; } @@ -1515,17 +1517,17 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { final Intent snoozeIntent = buildSnoozeRapidIntent(policy.template); builder.setDeleteIntent(PendingIntent.getBroadcast( - mContext, 0, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT)); + mContext, 0, snoozeIntent, FLAG_UPDATE_CURRENT | FLAG_IMMUTABLE)); final Intent viewIntent = buildViewDataUsageIntent(res, policy.template); // TODO: Resolve to single code path. if (UserManager.isHeadlessSystemUserMode()) { builder.setContentIntent(PendingIntent.getActivityAsUser( - mContext, 0, viewIntent, PendingIntent.FLAG_UPDATE_CURRENT, + mContext, 0, viewIntent, FLAG_UPDATE_CURRENT | FLAG_IMMUTABLE, /* options= */ null, UserHandle.CURRENT)); } else { builder.setContentIntent(PendingIntent.getActivity( - mContext, 0, viewIntent, PendingIntent.FLAG_UPDATE_CURRENT)); + mContext, 0, viewIntent, FLAG_UPDATE_CURRENT | FLAG_IMMUTABLE)); } break; }