• Jiri Benc's avatar
    selftests: bpf: fix inlines in test_lwt_seg6local · f9cae712
    Jiri Benc authored
    [ Upstream commit 11aca65e ]
    
    Selftests are reporting this failure in test_lwt_seg6local.sh:
    
    + ip netns exec ns2 ip -6 route add fb00::6 encap bpf in obj test_lwt_seg6local.o sec encap_srh dev veth2
    Error fetching program/map!
    Failed to parse eBPF program: Operation not permitted
    
    The problem is __attribute__((always_inline)) alone is not enough to prevent
    clang from inserting those functions in .text. In that case, .text is not
    marked as relocateable.
    
    See the output of objdump -h test_lwt_seg6local.o:
    
    Idx Name          Size      VMA               LMA               File off  Algn
      0 .text         00003530  0000000000000000  0000000000000000  00000040  2**3
                      CONTENTS, ALLOC, LOAD, READONLY, CODE
    
    This causes the iproute bpf loader to fail in bpf_fetch_prog_sec:
    bpf_has_call_data returns true but bpf_fetch_prog_relo fails as there's no
    relocateable .text section in the file.
    
    To fix this, convert to 'static __always_inline'.
    
    v2: Use 'static __always_inline' instead of 'static inline
        __attribute__((always_inline))'
    
    Fixes: c99a84ea ("selftests/bpf: test for seg6local End.BPF action")
    Signed-off-by: default avatarJiri Benc <jbenc@redhat.com>
    Acked-by: default avatarYonghong Song <yhs@fb.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    f9cae712
test_lwt_seg6local.c 10 KB