[PATCH 09/13] x86/kprobes: Use kprobe iterator in arch_check_optimized_kprobe

From: Jiri Olsa

Date: Mon Nov 09 2026 - 15:09:09 EST


arch_check_optimized_kprobe() checks each byte of the optimized range
with a separate get_kprobe() lookup. Iterate over registered probes in
the range instead, retaining the check for probes that are still armed.

Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx>
---
arch/x86/kernel/kprobes/opt.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kernel/kprobes/opt.c b/arch/x86/kernel/kprobes/opt.c
index 9da41424be77..cdf69c939631 100644
--- a/arch/x86/kernel/kprobes/opt.c
+++ b/arch/x86/kernel/kprobes/opt.c
@@ -334,12 +334,13 @@ static int can_optimize(unsigned long paddr)
/* Check optimized_kprobe can actually be optimized. */
int arch_check_optimized_kprobe(struct optimized_kprobe *op)
{
- int i;
+ unsigned long start = (unsigned long)op->kp.addr;
+ unsigned long end = start + op->optinsn.size - 1;
+ struct kprobe_iter iter;
struct kprobe *p;

- for (i = 1; i < op->optinsn.size; i++) {
- p = get_kprobe(op->kp.addr + i);
- if (p && !kprobe_disarmed(p))
+ for_each_kprobe(iter, p, start + 1, end) {
+ if (!kprobe_disarmed(p))
return -EEXIST;
}

--
2.43.0