diff options
| author | Paul Jensen <pauljensen@google.com> | 2014-06-11 10:58:16 -0400 |
|---|---|---|
| committer | Paul Jensen <pauljensen@google.com> | 2014-06-11 16:43:35 +0000 |
| commit | b72f6d71840afeb1923f64f8c44417f4f208c282 (patch) | |
| tree | 33738b1e3907e1afd2b15d48ff6b193174eb4bda /server/NetworkController.cpp | |
| parent | 414173882a87ded2fdd4f5181cd7dff3842a8917 (diff) | |
DO NOT MERGE: Fix use-after-free of interface name during network destruction.
bug:15560990
Change-Id: I899827c4f50847a3a60b6359f829bee5d6eb4f00
(cherry picked from commit 6ff16785ae1f67f44a73ad00d6c86690af6772d2)
Diffstat (limited to 'server/NetworkController.cpp')
| -rw-r--r-- | server/NetworkController.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/server/NetworkController.cpp b/server/NetworkController.cpp index 4e211142..a32dd670 100644 --- a/server/NetworkController.cpp +++ b/server/NetworkController.cpp @@ -36,6 +36,10 @@ #include "RouteController.h" #define LOG_TAG "NetworkController" + +#include <sys/socket.h> +#include <linux/if.h> + #include "cutils/log.h" #include "resolv_netid.h" @@ -273,9 +277,11 @@ bool NetworkController::destroyNetwork(unsigned netId) { InterfaceRange range = mNetIdToInterfaces.equal_range(netId); for (InterfaceIteratorConst iter = range.first; iter != range.second; ) { - InterfaceIteratorConst toErase = iter; + char interface[IFNAMSIZ]; + strncpy(interface, iter->second.c_str(), sizeof(interface)); + interface[sizeof(interface) - 1] = 0; ++iter; - if (!removeInterfaceFromNetwork(netId, toErase->second.c_str())) { + if (!removeInterfaceFromNetwork(netId, interface)) { status = false; } } |
