bpf/verifier: improve disassembly of BPF_NEG instructions
authorEdward Cree <ecree@solarflare.com>
Tue, 26 Sep 2017 15:35:29 +0000 (16:35 +0100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 28 Sep 2017 17:23:18 +0000 (10:23 -0700)
BPF_NEG takes only one operand, unlike the bulk of BPF_ALU[64] which are
 compound-assignments.  So give it its own format in print_bpf_insn().

Signed-off-by: Edward Cree <ecree@solarflare.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
kernel/bpf/verifier.c

index e8d7bb8e6b9880e84b00eb9171171fa723a07ee4..4cf9b72c59a0615337c3b5855f42df4dacb70cd3 100644 (file)
@@ -351,6 +351,11 @@ static void print_bpf_insn(const struct bpf_verifier_env *env,
                                verbose("BUG_alu64_%02x\n", insn->code);
                        else
                                print_bpf_end_insn(env, insn);
+               } else if (BPF_OP(insn->code) == BPF_NEG) {
+                       verbose("(%02x) r%d = %s-r%d\n",
+                               insn->code, insn->dst_reg,
+                               class == BPF_ALU ? "(u32) " : "",
+                               insn->dst_reg);
                } else if (BPF_SRC(insn->code) == BPF_X) {
                        verbose("(%02x) %sr%d %s %sr%d\n",
                                insn->code, class == BPF_ALU ? "(u32) " : "",