aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorWang YanQing <udknight@gmail.com>2019-04-27 04:28:26 -0400
committerDaniel Borkmann <daniel@iogearbox.net>2019-05-01 17:32:16 -0400
commit711aef1bbf88212a21f7103e88f397b47a528805 (patch)
tree50251af800517ab34fff64993a758ba2d2cf3190 /tools
parent886b7a50100a50f1cbd08a6f8ec5884dfbe082dc (diff)
bpf, x32: Fix bug for BPF_JMP | {BPF_JSGT, BPF_JSLE, BPF_JSLT, BPF_JSGE}
The current method to compare 64-bit numbers for conditional jump is: 1) Compare the high 32-bit first. 2) If the high 32-bit isn't the same, then goto step 4. 3) Compare the low 32-bit. 4) Check the desired condition. This method is right for unsigned comparison, but it is buggy for signed comparison, because it does signed comparison for low 32-bit too. There is only one sign bit in 64-bit number, that is the MSB in the 64-bit number, it is wrong to treat low 32-bit as signed number and do the signed comparison for it. This patch fixes the bug and adds a testcase in selftests/bpf for such bug. Signed-off-by: Wang YanQing <udknight@gmail.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'tools')
-rw-r--r--tools/testing/selftests/bpf/verifier/jit.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/verifier/jit.c b/tools/testing/selftests/bpf/verifier/jit.c
index be488b4495a3..c33adf344fae 100644
--- a/tools/testing/selftests/bpf/verifier/jit.c
+++ b/tools/testing/selftests/bpf/verifier/jit.c
@@ -86,3 +86,22 @@
86 .result = ACCEPT, 86 .result = ACCEPT,
87 .retval = 2, 87 .retval = 2,
88}, 88},
89{
90 "jit: jsgt, jslt",
91 .insns = {
92 BPF_LD_IMM64(BPF_REG_1, 0x80000000ULL),
93 BPF_LD_IMM64(BPF_REG_2, 0x0ULL),
94 BPF_JMP_REG(BPF_JSGT, BPF_REG_1, BPF_REG_2, 2),
95 BPF_MOV64_IMM(BPF_REG_0, 1),
96 BPF_EXIT_INSN(),
97
98 BPF_JMP_REG(BPF_JSLT, BPF_REG_2, BPF_REG_1, 2),
99 BPF_MOV64_IMM(BPF_REG_0, 1),
100 BPF_EXIT_INSN(),
101
102 BPF_MOV64_IMM(BPF_REG_0, 2),
103 BPF_EXIT_INSN(),
104 },
105 .result = ACCEPT,
106 .retval = 2,
107},