bpf: Fix a possible task gone issue with bpf_send_signal[_thread]() helpers
authorYonghong Song <yhs@fb.com>
Wed, 18 Jan 2023 20:48:15 +0000 (12:48 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 19 Jan 2023 02:44:16 +0000 (18:44 -0800)
commitbdb7fdb0aca8b96cef9995d3a57e251c2289322f
tree47e2918f1c914a7f902ee7d8a79595c844eade76
parent36024d023d139a0c8b552dc3b7f4dc7b4c139e8f
bpf: Fix a possible task gone issue with bpf_send_signal[_thread]() helpers

In current bpf_send_signal() and bpf_send_signal_thread() helper
implementation, irq_work is used to handle nmi context. Hao Sun
reported in [1] that the current task at the entry of the helper
might be gone during irq_work callback processing. To fix the issue,
a reference is acquired for the current task before enqueuing into
the irq_work so that the queued task is still available during
irq_work callback processing.

  [1] https://lore.kernel.org/bpf/20230109074425.12556-1-sunhao.th@gmail.com/

Fixes: 8b401f9ed244 ("bpf: implement bpf_send_signal() helper")
Tested-by: Hao Sun <sunhao.th@gmail.com>
Reported-by: Hao Sun <sunhao.th@gmail.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
Link: https://lore.kernel.org/r/20230118204815.3331855-1-yhs@fb.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/trace/bpf_trace.c