• Jiri Olsa's avatar
    bpf: Prevent bpf program recursion for raw tracepoint probes · 05b24ff9
    Jiri Olsa authored
    We got report from sysbot [1] about warnings that were caused by
    bpf program attached to contention_begin raw tracepoint triggering
    the same tracepoint by using bpf_trace_printk helper that takes
    trace_printk_lock lock.
    
     Call Trace:
      <TASK>
      ? trace_event_raw_event_bpf_trace_printk+0x5f/0x90
      bpf_trace_printk+0x2b/0xe0
      bpf_prog_a9aec6167c091eef_prog+0x1f/0x24
      bpf_trace_run2+0x26/0x90
      native_queued_spin_lock_slowpath+0x1c6/0x2b0
      _raw_spin_lock_irqsave+0x44/0x50
      bpf_trace_printk+0x3f/0xe0
      bpf_prog_a9aec6167c091eef_prog+0x1f/0x24
      bpf_trace_run2+0x26/0x90
      native_queued_spin_lock_slowpath+0x1c6/0x2b0
      _raw_spin_lock_irqsave+0x44/0x50
      bpf_trace_printk+0x3f/0xe0
      bpf_prog_a9aec6167c091eef_prog+0x1f/0x24
      bpf_trace_run2+0x26/0x90
      native_queued_spin_lock_slowpath+0x1c6/0x2b0
      _raw_spin_lock_irqsave+0x44/0x50
      bpf_trace_printk+0x3f/0xe0
      bpf_prog_a9aec6167c091eef_prog+0x1f/0x24
      bpf_trace_run2+0x26/0x90
      native_queued_spin_lock_slowpath+0x1c6/0x2b0
      _raw_spin_lock_irqsave+0x44/0x50
      __unfreeze_partials+0x5b/0x160
      ...
    
    The can be reproduced by attaching bpf program as raw tracepoint on
    contention_begin tracepoint. The bpf prog calls bpf_trace_printk
    helper. Then by running perf bench the spin lock code is forced to
    take slow path and call contention_begin tracepoint.
    
    Fixing this by skipping execution of the bpf program if it's
    already running, Using bpf prog 'active' field, which is being
    currently used by trampoline programs for the same reason.
    
    Moving bpf_prog_inc_misses_counter to syscall.c because
    trampoline.c is compiled in just for CONFIG_BPF_JIT option.
    Reviewed-by: default avatarStanislav Fomichev <sdf@google.com>
    Reported-by: syzbot+2251879aa068ad9c960d@syzkaller.appspotmail.com
    [1] https://lore.kernel.org/bpf/YxhFe3EwqchC%2FfYf@krava/T/#tSigned-off-by: default avatarJiri Olsa <jolsa@kernel.org>
    Link: https://lore.kernel.org/r/20220916071914.7156-1-jolsa@kernel.orgSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    05b24ff9
syscall.c 128 KB