From 14ac19c709096c84be1e7c8769e4bf241f02a4e1 Mon Sep 17 00:00:00 2001 From: Junyu Lai Date: Mon, 18 Apr 2022 16:54:27 +0800 Subject: [PATCH] Fix NetworkTemplate generates non-metered carrier template From current design, NetworkPolicyManagerService should only creates metered carrier/mobile templates. However, if someone calls the hidden API interface or the template was created before NetworkTemplate#Builder is published. The caller may create a non-metered carrier template and persist into the storage. This CL elimates this possibility and mark non-metered carrier template non-persistable, so devices could auto-recover from this symptom after reboot. Fix: 222382637 Test: TH Change-Id: Ia7ba3d92a84b8b246a4f11080f6fec0957865650 --- core/java/android/net/NetworkPolicy.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/java/android/net/NetworkPolicy.java b/core/java/android/net/NetworkPolicy.java index 4b35b0d773d5d..16ad0b84c5b94 100644 --- a/core/java/android/net/NetworkPolicy.java +++ b/core/java/android/net/NetworkPolicy.java @@ -396,7 +396,8 @@ public class NetworkPolicy implements Parcelable, Comparable { return true; case MATCH_CARRIER: case MATCH_MOBILE: - return !template.getSubscriberIds().isEmpty(); + return !template.getSubscriberIds().isEmpty() + && template.getMeteredness() == METERED_YES; case MATCH_WIFI: if (template.getWifiNetworkKeys().isEmpty() && template.getSubscriberIds().isEmpty()) {