samples/bpf: add error checking for perf ioctl calls in bpf loader
load_bpf_file() should fail if ioctl with command PERF_EVENT_IOC_ENABLE and PERF_EVENT_IOC_SET_BPF fails. When they do fail, proper error messages are printed. With this change, the below "syscall_tp" run shows that the maximum number of bpf progs attaching to the same perf tracepoint is indeed enforced. $ ./syscall_tp -i 64 prog #0: map ids 4 5 ... prog #63: map ids 382 383 $ ./syscall_tp -i 65 prog #0: map ids 4 5 ... prog #64: map ids 388 389 ioctl PERF_EVENT_IOC_SET_BPF failed err Argument list too long Signed-off-by: Yonghong Song <yhs@fb.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:
parent
c8c088ba0e
commit
0ec9552b43
|
@ -193,8 +193,18 @@ static int load_and_attach(const char *event, struct bpf_insn *prog, int size)
|
|||
return -1;
|
||||
}
|
||||
event_fd[prog_cnt - 1] = efd;
|
||||
ioctl(efd, PERF_EVENT_IOC_ENABLE, 0);
|
||||
ioctl(efd, PERF_EVENT_IOC_SET_BPF, fd);
|
||||
err = ioctl(efd, PERF_EVENT_IOC_ENABLE, 0);
|
||||
if (err < 0) {
|
||||
printf("ioctl PERF_EVENT_IOC_ENABLE failed err %s\n",
|
||||
strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
err = ioctl(efd, PERF_EVENT_IOC_SET_BPF, fd);
|
||||
if (err < 0) {
|
||||
printf("ioctl PERF_EVENT_IOC_SET_BPF failed err %s\n",
|
||||
strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue