• Wang YanQing's avatar
    bpf, x32: Fix bug for BPF_JMP | {BPF_JSGT, BPF_JSLE, BPF_JSLT, BPF_JSGE} · 711aef1b
    Wang YanQing authored
    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: default avatarWang YanQing <udknight@gmail.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    711aef1b
jit.c 2.78 KB