fix 'cgroupsockaddr' support
... it does prefix matching - and first match wins.
By appending / to the strings this no longer matters.
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I54f41fbccd2632334adb9d1ae4fcc44cd1b0141f
diff --git a/libbpf_android/Loader.cpp b/libbpf_android/Loader.cpp
index 9fd7dff..77b865a 100644
--- a/libbpf_android/Loader.cpp
+++ b/libbpf_android/Loader.cpp
@@ -28,9 +28,9 @@
#include <sys/utsname.h>
#include <unistd.h>
-// This is BpfLoader v0.6
+// This is BpfLoader v0.7
#define BPFLOADER_VERSION_MAJOR 0u
-#define BPFLOADER_VERSION_MINOR 6u
+#define BPFLOADER_VERSION_MINOR 7u
#define BPFLOADER_VERSION ((BPFLOADER_VERSION_MAJOR << 16) | BPFLOADER_VERSION_MINOR)
#include "../progs/include/bpf_map_def.h"
@@ -90,18 +90,15 @@
* Instead use the DEFINE_(BPF|XDP)_(PROG|MAP)... & LICENSE/CRITICAL macros.
*/
sectionType sectionNameTypes[] = {
- {"kprobe", BPF_PROG_TYPE_KPROBE},
- {"tracepoint", BPF_PROG_TYPE_TRACEPOINT},
- {"skfilter", BPF_PROG_TYPE_SOCKET_FILTER},
- {"cgroupskb", BPF_PROG_TYPE_CGROUP_SKB},
- {"schedcls", BPF_PROG_TYPE_SCHED_CLS},
- {"schedact", BPF_PROG_TYPE_SCHED_ACT},
- {"cgroupsock", BPF_PROG_TYPE_CGROUP_SOCK},
- {"xdp", BPF_PROG_TYPE_XDP},
- {"cgroupsockaddr", BPF_PROG_TYPE_CGROUP_SOCK_ADDR},
-
- /* End of table */
- {"END", BPF_PROG_TYPE_UNSPEC},
+ {"cgroupskb/", BPF_PROG_TYPE_CGROUP_SKB},
+ {"cgroupsock/", BPF_PROG_TYPE_CGROUP_SOCK},
+ {"cgroupsockaddr/", BPF_PROG_TYPE_CGROUP_SOCK_ADDR},
+ {"kprobe/", BPF_PROG_TYPE_KPROBE},
+ {"schedact/", BPF_PROG_TYPE_SCHED_ACT},
+ {"schedcls/", BPF_PROG_TYPE_SCHED_CLS},
+ {"skfilter/", BPF_PROG_TYPE_SOCKET_FILTER},
+ {"tracepoint/", BPF_PROG_TYPE_TRACEPOINT},
+ {"xdp/", BPF_PROG_TYPE_XDP},
};
typedef struct {
@@ -283,8 +280,8 @@
}
static enum bpf_prog_type getSectionType(string& name) {
- for (int i = 0; sectionNameTypes[i].type != BPF_PROG_TYPE_UNSPEC; i++)
- if (StartsWith(name, sectionNameTypes[i].name)) return sectionNameTypes[i].type;
+ for (auto& snt : sectionNameTypes)
+ if (StartsWith(name, snt.name)) return snt.type;
return BPF_PROG_TYPE_UNSPEC;
}
@@ -292,21 +289,19 @@
/* If ever needed
static string getSectionName(enum bpf_prog_type type)
{
- for (int i = 0; sectionNameTypes[i].type != BPF_PROG_TYPE_UNSPEC; i++)
- if (sectionNameTypes[i].type == type)
- return string(sectionNameTypes[i].name);
+ for (auto& snt : sectionNameTypes)
+ if (snt.type == type)
+ return string(snt.name);
return NULL;
}
*/
static bool isRelSection(codeSection& cs, string& name) {
- for (int i = 0; sectionNameTypes[i].type != BPF_PROG_TYPE_UNSPEC; i++) {
- sectionType st = sectionNameTypes[i];
+ for (auto& snt : sectionNameTypes) {
+ if (snt.type != cs.type) continue;
- if (st.type != cs.type) continue;
-
- if (StartsWith(name, string(".rel") + st.name + "/"))
+ if (StartsWith(name, string(".rel") + snt.name))
return true;
else
return false;