• Tiezhu Yang's avatar
    LoongArch: BPF: Fix unconditional bswap instructions · e2f7b3d8
    Tiezhu Yang authored
    We can see that "bswap32: Takes an unsigned 32-bit number in either big-
    or little-endian format and returns the equivalent number with the same
    bit width but opposite endianness" in BPF Instruction Set Specification,
    so it should clear the upper 32 bits in "case 32:" for both BPF_ALU and
    BPF_ALU64.
    
    [root@linux fedora]# echo 1 > /proc/sys/net/core/bpf_jit_enable
    [root@linux fedora]# modprobe test_bpf
    
    Before:
    test_bpf: #313 BSWAP 32: 0x0123456789abcdef -> 0xefcdab89 jited:1 ret 1460850314 != -271733879 (0x5712ce8a != 0xefcdab89)FAIL (1 times)
    test_bpf: #317 BSWAP 32: 0xfedcba9876543210 -> 0x10325476 jited:1 ret -1460850316 != 271733878 (0xa8ed3174 != 0x10325476)FAIL (1 times)
    
    After:
    test_bpf: #313 BSWAP 32: 0x0123456789abcdef -> 0xefcdab89 jited:1 4 PASS
    test_bpf: #317 BSWAP 32: 0xfedcba9876543210 -> 0x10325476 jited:1 4 PASS
    
    Fixes: 4ebf9216 ("LoongArch: BPF: Support unconditional bswap instructions")
    Acked-by: default avatarHengqi Chen <hengqi.chen@gmail.com>
    Signed-off-by: default avatarTiezhu Yang <yangtiezhu@loongson.cn>
    Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
    e2f7b3d8
bpf_jit.c 33.4 KB