summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Maciej Żenczykowski <maze@google.com> 2022-02-19 22:45:42 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2022-02-19 22:45:42 +0000
commit038fd80ce8b34d30bbd4ae8084f085b38ab34ca0 (patch)
treea3a6c1f2991d11cecef13900d2371a4852b77abc
parente60fa2d09935453fd647616362d80438dfe3116e (diff)
parent5f3045cae792fd2fa67a931fe1cc03245eaecc2e (diff)
Merge "Fix system_server crash while iterating CookieTagMap" am: dd5a31eb2d am: c1124eff5b am: 5f3045cae7
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1990333 Change-Id: Ic459069134734d7bf80b45bb6acd2a9fded4afbb
-rw-r--r--packages/ConnectivityT/service/src/com/android/server/net/NetworkStatsService.java8
1 files changed, 7 insertions, 1 deletions
diff --git a/packages/ConnectivityT/service/src/com/android/server/net/NetworkStatsService.java b/packages/ConnectivityT/service/src/com/android/server/net/NetworkStatsService.java
index ef9ebb50b642..ef6f39a5c040 100644
--- a/packages/ConnectivityT/service/src/com/android/server/net/NetworkStatsService.java
+++ b/packages/ConnectivityT/service/src/com/android/server/net/NetworkStatsService.java
@@ -1887,7 +1887,13 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private void deleteKernelTagData(int uid) {
try {
mCookieTagMap.forEach((key, value) -> {
- if (value.uid == uid) {
+ // If SkDestroyListener deletes the socket tag while this code is running,
+ // forEach will either restart iteration from the beginning or return null,
+ // depending on when the deletion happens.
+ // If it returns null, continue iteration to delete the data and in fact it would
+ // just iterate from first key because BpfMap#getNextKey would return first key
+ // if the current key is not exist.
+ if (value != null && value.uid == uid) {
try {
mCookieTagMap.deleteEntry(key);
} catch (ErrnoException e) {