intmain(int argc, char **argv) { structlsm_mount_bpf *skel; int err; /* Set up libbpf errors and debug info callback */ libbpf_set_print(libbpf_print_fn); /* Open, load, and verify BPF application */ skel = lsm_mount_bpf__open_and_load(); if (!skel) { fprintf(stderr, "Failed to open and load BPF skeleton\n"); goto cleanup; } /* Attach lsm handler */ err = lsm_mount_bpf__attach(skel); if (err) { fprintf(stderr, "Failed to attach BPF skeleton\n"); goto cleanup; } printf("Successfully started! Please run `sudo cat /sys/kernel/tracing/trace_pipe` " "to see output of the BPF programs.\n");
for (;;) { /* trigger our BPF program */ fprintf(stderr, "."); sleep(1); }
$ make lsm_mount BPF .output/lsm_mount.bpf.o GEN-SKEL .output/lsm_mount.skel.h CC .output/lsm_mount.o BINARY lsm_mount $ sudo ./lsm_mount libbpf: map 'lsm_mount.rodata': created successfully, fd=3 libbpf: map '.rodata.str1.1': created successfully, fd=4 Successfully started! Please run `sudo cat /sys/kernel/tracing/trace_pipe` to see output of the BPF programs. .........
另起一个终端,尝试挂载tmpfs文件系统:
1 2 3
$ sudo mkdir -p /mnt/tmp $ sudo mount -t tmpfs tmpfs /mnt/tmp mount: /mnt/tmp: cannot mount tmpfs read-only.
查看eBPF输出:
1 2 3
$ sudo cat /sys/kernel/tracing/trace_pipe <...>-2354462 [002] ...11 5532081.669910: bpf_trace_printk: [LSM] PID 2354462, Block mount of filesystem type: tmpfs <...>-2354462 [002] ...11 5532081.669915: bpf_trace_printk: [LSM] PID 2354462, Block mount of filesystem type: tmpfs