diff options
author | Erik Kline <ek@google.com> | 2018-05-09 16:58:42 +0900 |
---|---|---|
committer | Erik Kline <ek@google.com> | 2018-05-09 23:14:07 +0900 |
commit | 0bcb37487a64054f2672f8028a633c69a54cdd6f (patch) | |
tree | 6df7d282d4d07268e80aa170d78fa3ff457cca16 | |
parent | e64bc91c1cb4c840d9b589a7ae48d74dd8ce99ce (diff) | |
download | netd-0bcb37487a64054f2672f8028a633c69a54cdd6f.tar.gz |
Switch from leaking Slice memory to MemBlock
Test: as follows
- built
- flashed
- booted
- bpfloader builds
- system/net/tests/runtests.sh passes
- adb shell dumpsys netd trafficcontroller shows happy BPF
Bug: 78250686
Change-Id: Id1b9246bfa192683abbde466d28639cbe6f94483
-rw-r--r-- | bpfloader/BpfLoader.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/bpfloader/BpfLoader.cpp b/bpfloader/BpfLoader.cpp index 4b7f74ae..375ed924 100644 --- a/bpfloader/BpfLoader.cpp +++ b/bpfloader/BpfLoader.cpp @@ -41,12 +41,14 @@ #include <android-base/unique_fd.h> #include <cutils/log.h> +#include <netdutils/MemBlock.h> #include <netdutils/Misc.h> #include <netdutils/Slice.h> #include "bpf/BpfUtils.h" #include "bpf/bpf_shared.h" using android::base::unique_fd; +using android::netdutils::MemBlock; using android::netdutils::Slice; #define BPF_PROG_PATH "/system/etc/bpf" @@ -108,18 +110,18 @@ struct ReplacePattern { } }; -Slice cgroupIngressProg; -Slice cgroupEgressProg; -Slice xtIngressProg; -Slice xtEgressProg; +MemBlock cgroupIngressProg; +MemBlock cgroupEgressProg; +MemBlock xtIngressProg; +MemBlock xtEgressProg; -Slice getProgFromMem(Slice buffer, Elf64_Shdr* section) { +MemBlock getProgFromMem(Slice buffer, Elf64_Shdr* section) { uint64_t progSize = (uint64_t)section->sh_size; Slice progSection = take(drop(buffer, section->sh_offset), progSize); if (progSection.size() < progSize) FAIL("programSection out of bound\n"); - char* progArray = new char[progSize]; - Slice progCopy(progArray, progSize); - if (copy(progCopy, progSection) != progSize) { + + MemBlock progCopy(progSection); + if (progCopy.get().size() != progSize) { FAIL("program cannot be extracted"); } return progCopy; |