]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bpf: disasm: add support for BPF_JMP|BPF_JA|BPF_X
authorAnton Protopopov <a.s.protopopov@gmail.com>
Wed, 5 Nov 2025 09:04:07 +0000 (09:04 +0000)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 6 Nov 2025 01:53:23 +0000 (17:53 -0800)
Add support for indirect jump instruction.

Example output from bpftool:

   0: (79) r3 = *(u64 *)(r1 +0)
   1: (25) if r3 > 0x4 goto pc+666
   2: (67) r3 <<= 3
   3: (18) r1 = 0xffffbeefspameggs
   5: (0f) r1 += r3
   6: (79) r1 = *(u64 *)(r1 +0)
   7: (0d) gotox r1

Signed-off-by: Anton Protopopov <a.s.protopopov@gmail.com>
Acked-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20251105090410.1250500-10-a.s.protopopov@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/disasm.c

index 20883c6b1546c75560986f1f1135c1f07cf9bbc3..f8a3c7eb451e4a1b0449954a476abfa235a78db1 100644 (file)
@@ -358,6 +358,9 @@ void print_bpf_insn(const struct bpf_insn_cbs *cbs,
                } else if (insn->code == (BPF_JMP | BPF_JA)) {
                        verbose(cbs->private_data, "(%02x) goto pc%+d\n",
                                insn->code, insn->off);
+               } else if (insn->code == (BPF_JMP | BPF_JA | BPF_X)) {
+                       verbose(cbs->private_data, "(%02x) gotox r%d\n",
+                               insn->code, insn->dst_reg);
                } else if (insn->code == (BPF_JMP | BPF_JCOND) &&
                           insn->src_reg == BPF_MAY_GOTO) {
                        verbose(cbs->private_data, "(%02x) may_goto pc%+d\n",