summaryrefslogtreecommitdiff
path: root/server/NetworkController.cpp
diff options
context:
space:
mode:
authorBernie Innocenti <codewiz@google.com>2018-07-19 18:06:52 +0900
committerBernie Innocenti <codewiz@google.com>2018-07-20 00:13:48 +0900
commitdd5a4f0ef32dbb30575a68b6869a68fc30c57dc4 (patch)
treecf1092abea692c1089fdb3eb88a970664fbf3a96 /server/NetworkController.cpp
parent286d426d5459428b9db616c734b47813181c8c50 (diff)
Fix use-after-free in NetworkController::removeInterfaceAddress()
Test: system/netd/tests/runtests.sh Bug: 111381576 Change-Id: I0ebb9ac758b55f10536fef75f0eb7b69e2feccbc
Diffstat (limited to 'server/NetworkController.cpp')
-rw-r--r--server/NetworkController.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/server/NetworkController.cpp b/server/NetworkController.cpp
index ed5156f6..2242d42e 100644
--- a/server/NetworkController.cpp
+++ b/server/NetworkController.cpp
@@ -629,7 +629,9 @@ bool NetworkController::removeInterfaceAddress(unsigned ifindex, const char* add
std::unordered_set<unsigned>& ifindices = ifindicesIter->second;
if (ifindices.erase(ifindex) > 0) {
if (ifindices.size() == 0) {
- mAddressToIfindices.erase(ifindicesIter);
+ mAddressToIfindices.erase(ifindicesIter); // Invalidates ifindices
+ // The address is no longer configured on any interface.
+ return true;
}
} else {
ALOGE("No record of address %s on interface %u", address, ifindex);