• Tiezhu Yang's avatar
    LoongArch: BPF: Fix sign-extension mov instructions · 772cbe94
    Tiezhu Yang authored
    We can see that "Short form of movsx, dst_reg = (s8,s16,s32)src_reg" in
    include/linux/filter.h, additionally, for BPF_ALU64 the value of the
    destination register is unchanged whereas for BPF_ALU the upper 32 bits
    of the destination register are zeroed, so it should clear the upper 32
    bits for BPF_ALU.
    
    [root@linux fedora]# echo 1 > /proc/sys/net/core/bpf_jit_enable
    [root@linux fedora]# modprobe test_bpf
    
    Before:
    test_bpf: #81 ALU_MOVSX | BPF_B jited:1 ret 2 != 1 (0x2 != 0x1)FAIL (1 times)
    test_bpf: #82 ALU_MOVSX | BPF_H jited:1 ret 2 != 1 (0x2 != 0x1)FAIL (1 times)
    
    After:
    test_bpf: #81 ALU_MOVSX | BPF_B jited:1 6 PASS
    test_bpf: #82 ALU_MOVSX | BPF_H jited:1 6 PASS
    
    By the way, the bpf selftest case "./test_progs -t verifier_movsx" can
    also be fixed with this patch.
    
    Fixes: f48012f1 ("LoongArch: BPF: Support sign-extension mov 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>
    772cbe94
bpf_jit.c 33.4 KB