diff --git a/bpfloader/BpfLoader.cpp b/bpfloader/BpfLoader.cpp index c9bed5e..ac59a24 100644 --- a/bpfloader/BpfLoader.cpp +++ b/bpfloader/BpfLoader.cpp @@ -49,24 +49,10 @@ #include "bpf/BpfUtils.h" using android::base::EndsWith; -using android::base::unique_fd; using std::string; #define BPF_PROG_PATH "/system/etc/bpf/" -#define CLEANANDEXIT(ret, mapPatterns) \ - do { \ - for (size_t i = 0; i < mapPatterns.size(); i++) { \ - if (mapPatterns[i].fd > -1) { \ - close(mapPatterns[i].fd); \ - } \ - } \ - return ret; \ - } while (0) - -using android::bpf::BpfMapInfo; -using android::bpf::BpfProgInfo; - void loadAllElfObjects(void) { DIR* dir; struct dirent* ent; diff --git a/libbpf_android/include/bpf/BpfUtils.h b/libbpf_android/include/bpf/BpfUtils.h index 376b726..f8295e3 100644 --- a/libbpf_android/include/bpf/BpfUtils.h +++ b/libbpf_android/include/bpf/BpfUtils.h @@ -36,31 +36,8 @@ #define ptr_to_u64(x) ((uint64_t)(uintptr_t)(x)) #define DEFAULT_LOG_LEVEL 1 -#define MAP_LD_CMD_HEAD 0x18 #define ARRAY_SIZE(a) (sizeof(a) / sizeof(*(a))) -// The BPF instruction bytes that we need to replace. x is a placeholder (e.g., COOKIE_TAG_MAP). -#define BPF_MAP_SEARCH_PATTERN(x) \ - { \ - 0x18, 0x01, 0x00, 0x00, \ - (x)[0], (x)[1], (x)[2], (x)[3], \ - 0x00, 0x00, 0x00, 0x00, \ - (x)[4], (x)[5], (x)[6], (x)[7] \ - } - -// The bytes we'll replace them with. x is the actual fd number for the map at runtime. -// The second byte is changed from 0x01 to 0x11 since 0x11 is the special command used -// for bpf map fd loading. The original 0x01 is only a normal load command. -#define BPF_MAP_REPLACE_PATTERN(x) \ - { \ - 0x18, 0x11, 0x00, 0x00, \ - (x)[0], (x)[1], (x)[2], (x)[3], \ - 0x00, 0x00, 0x00, 0x00, \ - (x)[4], (x)[5], (x)[6], (x)[7] \ - } - -#define MAP_CMD_SIZE 16 - #define TEST_LIMIT 8388608 namespace android { @@ -98,31 +75,8 @@ struct IfaceValue { char name[IFNAMSIZ]; }; -struct BpfProgInfo { - bpf_attach_type attachType; - const char* path; - const char* name; - bpf_prog_type loadType; - base::unique_fd fd; -}; - int mapRetrieve(const char* pathname, uint32_t flags); -struct BpfMapInfo { - std::array search; - std::array replace; - const int fd; - std::string path; - - BpfMapInfo(uint64_t dummyFd, const char* mapPath) - : BpfMapInfo(dummyFd, android::bpf::mapRetrieve(mapPath, 0)) {} - - BpfMapInfo(uint64_t dummyFd, int realFd, const char* mapPath = "") : fd(realFd), path(mapPath) { - search = BPF_MAP_SEARCH_PATTERN((uint8_t*)&dummyFd); - replace = BPF_MAP_REPLACE_PATTERN((uint8_t*)&realFd); - } -}; - enum class BpfLevel { // Devices shipped before P or kernel version is lower than 4.9 do not // have eBPF enabled.