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

Merged-In: Ib9b786c7d89f3b50f0338f8d10539c65101c1c64
Merged-In: I1fbca5934519fca9bd0fd993e87bdf1730524b68
Change-Id: Id1b9246bfa192683abbde466d28639cbe6f94483
(cherry picked from commit 0bcb37487a64054f2672f8028a633c69a54cdd6f)
diff --git a/bpfloader/BpfLoader.cpp b/bpfloader/BpfLoader.cpp
index c83ee1f..47dbb3d 100644
--- a/bpfloader/BpfLoader.cpp
+++ b/bpfloader/BpfLoader.cpp
@@ -41,12 +41,14 @@
 #include <android-base/unique_fd.h>
 #include <log/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 @@
     }
 };
 
-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;