From ef4f7dc4ea5619b713bcfaa4985338ec07b9f479 Mon Sep 17 00:00:00 2001 From: xshu Date: Wed, 17 Jun 2020 17:43:53 -0700 Subject: Fix NPE in BssidBlocklistMonitor Due to unexpected orderings of events happening in ClientModeImpl, sometimes invalid inputs are being passed to BssidBlocklistMonitor to cause a NPE. This patch fixes the crash but does not address the root cause. Bug: 159183809 Test: atest com.android.server.wifi Change-Id: I6991b29949f9799662b8d29a4e0621fed9ff8cf2 --- service/java/com/android/server/wifi/BssidBlocklistMonitor.java | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'service') diff --git a/service/java/com/android/server/wifi/BssidBlocklistMonitor.java b/service/java/com/android/server/wifi/BssidBlocklistMonitor.java index 96770443d..dffd77443 100644 --- a/service/java/com/android/server/wifi/BssidBlocklistMonitor.java +++ b/service/java/com/android/server/wifi/BssidBlocklistMonitor.java @@ -220,6 +220,12 @@ public class BssidBlocklistMonitor { */ public void blockBssidForDurationMs(@NonNull String bssid, @NonNull String ssid, long durationMs) { + if (bssid == null || ssid == null || WifiManager.UNKNOWN_SSID.equals(ssid) + || bssid.equals(ClientModeImpl.SUPPLICANT_BSSID_ANY) || durationMs <= 0) { + Log.e(TAG, "Invalid input: BSSID=" + bssid + ", SSID=" + ssid + + ", durationMs=" + durationMs); + return; + } BssidStatus status = getOrCreateBssidStatus(bssid, ssid); if (status.isInBlocklist && status.blocklistEndTimeMs - mClock.getWallClockMillis() > durationMs) { @@ -407,6 +413,9 @@ public class BssidBlocklistMonitor { int prevSize = mBssidStatusMap.size(); mBssidStatusMap.entrySet().removeIf(e -> { BssidStatus status = e.getValue(); + if (status.ssid == null) { + return false; + } if (status.ssid.equals(ssid)) { mBssidStatusHistoryLogger.add(status, "clearBssidBlocklistForSsid"); return true; -- cgit v1.2.3