aboutgitcodelistschat:MatrixIRC
path: root/bpf_dbg.c
diff options
context:
space:
mode:
authorAlice Frosi <afrosi@redhat.com>2022-12-21 12:01:39 +0100
committerAlice Frosi <afrosi@redhat.com>2022-12-21 14:57:12 +0100
commitca4c9f229aa46d7983302323d7468cabde55995c (patch)
tree1e242c9bde19c254534b042846924f59aa16b46e /bpf_dbg.c
parent5d408e91861d8c995931c69eae62c25cdf130ca5 (diff)
downloadseitan-ca4c9f229aa46d7983302323d7468cabde55995c.tar
seitan-ca4c9f229aa46d7983302323d7468cabde55995c.tar.gz
seitan-ca4c9f229aa46d7983302323d7468cabde55995c.tar.bz2
seitan-ca4c9f229aa46d7983302323d7468cabde55995c.tar.lz
seitan-ca4c9f229aa46d7983302323d7468cabde55995c.tar.xz
seitan-ca4c9f229aa46d7983302323d7468cabde55995c.tar.zst
seitan-ca4c9f229aa46d7983302323d7468cabde55995c.zip
Create bpf_dbg program to disassemble BPF filters
The bpf_dbg binary prints the instructions included in the BPF filter. This is particurarly useful for debugging and verifing the generated filter. E.g: ./bpf_dbg test.bpf Read 7 entries l0: ld [4] l1: jeq #0xc000003e, l2, l5 l2: ld [0] l3: jeq #0x2a, l4, l5 l4: ja 5 l5: ret #0x7fff0000 l6: ret #0x7fc00000 Signed-off-by: Alice Frosi <afrosi@redhat.com>
Diffstat (limited to 'bpf_dbg.c')
-rw-r--r--bpf_dbg.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/bpf_dbg.c b/bpf_dbg.c
new file mode 100644
index 0000000..2f109b1
--- /dev/null
+++ b/bpf_dbg.c
@@ -0,0 +1,27 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <linux/filter.h>
+#include <unistd.h>
+
+#include "disasm.h"
+
+int main(int argc, char **argv)
+{
+ struct sock_filter *filter;
+ size_t fd, n;
+
+ if (argc < 2) {
+ perror("missing input file");
+ exit(EXIT_FAILURE);
+ }
+ filter = calloc(SIZE_FILTER, sizeof(struct sock_filter));
+ fd = open(argv[1], O_CLOEXEC | O_RDONLY);
+
+ n = read(fd, filter, sizeof(struct sock_filter) * SIZE_FILTER);
+ close(fd);
+ printf("Read %ld entries\n", n / sizeof(struct sock_filter));
+ bpf_disasm_all(filter, n / sizeof(struct sock_filter));
+ free(filter);
+ return 0;
+}