diff options
| author | 2022-02-19 22:24:42 +0000 | |
|---|---|---|
| committer | 2022-02-19 22:24:42 +0000 | |
| commit | 5f3045cae792fd2fa67a931fe1cc03245eaecc2e (patch) | |
| tree | c5efc2dd17198e19dcbb24513980741b6fd22301 | |
| parent | 399ae54b256164ddb3cb6d12c36e40eefb1a22cf (diff) | |
| parent | c1124eff5b778c516fd26b70aec86a40f1035d6d (diff) | |
Merge "Fix system_server crash while iterating CookieTagMap" am: dd5a31eb2d am: c1124eff5b
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1990333
Change-Id: I6da755077fd8a6bebb8209f0d747e0d54b988c48
| -rw-r--r-- | packages/ConnectivityT/service/src/com/android/server/net/NetworkStatsService.java | 8 |
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 eeb56d05e706..b1936231148c 100644 --- a/packages/ConnectivityT/service/src/com/android/server/net/NetworkStatsService.java +++ b/packages/ConnectivityT/service/src/com/android/server/net/NetworkStatsService.java @@ -1875,7 +1875,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) { |