• Chuang Wang's avatar
    libbpf: Cleanup the legacy kprobe_event on failed add/attach_event() · 80940293
    Chuang Wang authored
    Before the 0bc11ed5 commit ("kprobes: Allow kprobes coexist with
    livepatch"), in a scenario where livepatch and kprobe coexist on the
    same function entry, the creation of kprobe_event using
    add_kprobe_event_legacy() will be successful, at the same time as a
    trace event (e.g. /debugfs/tracing/events/kprobe/XXX) will exist, but
    perf_event_open() will return an error because both livepatch and kprobe
    use FTRACE_OPS_FL_IPMODIFY. As follows:
    
    1) add a livepatch
    
    $ insmod livepatch-XXX.ko
    
    2) add a kprobe using tracefs API (i.e. add_kprobe_event_legacy)
    
    $ echo 'p:mykprobe XXX' > /sys/kernel/debug/tracing/kprobe_events
    
    3) enable this kprobe (i.e. sys_perf_event_open)
    
    This will return an error, -EBUSY.
    
    On Andrii Nakryiko's comment, few error paths in
    bpf_program__attach_kprobe_opts() that should need to call
    remove_kprobe_event_legacy().
    
    With this patch, whenever an error is returned after
    add_kprobe_event_legacy() or bpf_program__attach_perf_event_opts(), this
    ensures that the created kprobe_event is cleaned.
    Signed-off-by: default avatarChuang Wang <nashuiliang@gmail.com>
    Signed-off-by: default avatarJingren Zhou <zhoujingren@didiglobal.com>
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20220629151848.65587-2-nashuiliang@gmail.com
    80940293
libbpf.c 319 KB