summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Kline <ek@google.com>2018-05-09 16:58:42 +0900
committerErik Kline <ek@google.com>2018-05-09 23:14:07 +0900
commit0bcb37487a64054f2672f8028a633c69a54cdd6f (patch)
tree6df7d282d4d07268e80aa170d78fa3ff457cca16
parente64bc91c1cb4c840d9b589a7ae48d74dd8ce99ce (diff)
downloadnetd-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.cpp18
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;