Linux-RISC-V Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/2] riscv: kprobes: reject probes inside LR/SC sequences
@ 2026-08-28  9:12 Xiaofeng Yuan
  2026-08-28  9:12 ` [PATCH v4 1/2] riscv: probes: reject kprobes " Xiaofeng Yuan
  2026-08-28  9:12 ` [PATCH v4 2/2] riscv: kprobes: add KUnit test for LR/SC sequence rejection Xiaofeng Yuan
  0 siblings, 2 replies; 3+ messages in thread
From: Xiaofeng Yuan @ 2026-08-28  9:12 UTC (permalink / raw)
  To: Nam Cao, Paul Walmsley, Palmer Dabbelt
  Cc: Albert Ou, linux-riscv, Xiaofeng Yuan

A breakpoint trap taken in the middle of an LR/SC sequence clears the
load reservation, so an SC following the probed instruction always fails
and the enclosing retry loop re-enters the breakpoint, livelocking the
CPU.

This series makes the RISC-V kprobes implementation reject probes placed
inside an LR/SC sequence:

  - patch 1 detects the sequences (insn.h decoding helpers, reject list
    in decode-insn.c, and a forward scan from the function start in
    kprobes.c).
  - patch 2 adds a KUnit test that registers a probe inside and right
    after a hand-written LR/SC loop and checks rejection/acceptance.

Changes in v4:
  - v3 walked backwards from the probe to find an open LR.  That was
    wrong twice: the LR/SC state was toggled in the reverse order, and
    worse, a backward walk is fundamentally ambiguous in RISC-V (the
    halfword at addr-2 may be a compressed instruction or the upper
    half of a 32-bit instruction, and the length bits cannot be
    trusted).  v4 walks forward from the function start instead, a
    known instruction boundary.
  - document the kallsyms_lookup_size_offset() offset-0 caveat in the
    commit message, and test it with local (.L) labels so probe
    addresses never coincide with kallsyms symbols inside the sequence.
  - the KUnit test (patch 2) is new in v4.  No earlier version had a
    dedicated LR/SC test, which is why the backward-scan bugs went
    unnoticed.

Link: https://lore.kernel.org/linux-riscv/REPLACE-WITH-V3-MSGID/

Xiaofeng Yuan (2):
  riscv: probes: reject kprobes inside LR/SC sequences
  riscv: kprobes: add KUnit test for LR/SC sequence rejection

 arch/riscv/include/asm/insn.h                 | 18 +++++++
 arch/riscv/kernel/probes/decode-insn.c        |  2 +
 arch/riscv/kernel/probes/kprobes.c            | 54 +++++++++++++++++++
 .../kernel/tests/kprobes/test-kprobes-asm.S   | 19 +++++++
 .../riscv/kernel/tests/kprobes/test-kprobes.c | 19 +++++++
 .../riscv/kernel/tests/kprobes/test-kprobes.h |  6 +++
 6 files changed, 118 insertions(+)

-- 
2.43.0


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-08-28  9:13 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-28  9:12 [PATCH v4 0/2] riscv: kprobes: reject probes inside LR/SC sequences Xiaofeng Yuan
2026-08-28  9:12 ` [PATCH v4 1/2] riscv: probes: reject kprobes " Xiaofeng Yuan
2026-08-28  9:12 ` [PATCH v4 2/2] riscv: kprobes: add KUnit test for LR/SC sequence rejection Xiaofeng Yuan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox