• Alexei Starovoitov's avatar
    selftests/bpf: Fix trace_virtqueue_add_sgs test issue with LLVM 17. · 3c2611ba
    Alexei Starovoitov authored
    LLVM commit https://reviews.llvm.org/D143726
    
     introduced hoistMinMax optimization
    that transformed
      (i < VIRTIO_MAX_SGS) && (i < out_sgs)
    into
      i < MIN(VIRTIO_MAX_SGS, out_sgs)
    
    and caused the verifier to stop recognizing such loop as bounded.
    
    Which resulted in the following test failure:
    
    libbpf: prog 'trace_virtqueue_add_sgs': BPF program load failed: Bad address
    libbpf: prog 'trace_virtqueue_add_sgs': -- BEGIN PROG LOAD LOG --
    The sequence of 8193 jumps is too complex.
    verification time 789206 usec
    stack depth 56
    processed 156446 insns (limit 1000000) max_states_per_insn 7 total_states 1746 peak_states 1701 mark_read 12
    -- END PROG LOAD LOG --
    libbpf: prog 'trace_virtqueue_add_sgs': failed to load: -14
    libbpf: failed to load object 'loop6.bpf.o'
    
    Workaround the verifier limitation for now with inline asm that
    prevents this particular optimization.
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    3c2611ba
loop6.c 2.21 KB