• Jesper Dangaard Brouer's avatar
    samples/bpf: bpf_load.c order of prog_fd[] should correspond with ELF order · 7bc57950
    Jesper Dangaard Brouer authored
    An eBPF ELF file generated with LLVM can contain several program
    section, which can be used for bpf tail calls.  The bpf prog file
    descriptors are accessible via array prog_fd[].
    
    At-least XDP samples assume ordering, and uses prog_fd[0] is the main
    XDP program to attach.  The actual order of array prog_fd[] depend on
    whether or not a bpf program section is referencing any maps or not.
    Not using a map result in being loaded/processed after all other
    prog section.  Thus, this can lead to some very strange and hard to
    debug situation, as the user can only see a FD and cannot correlated
    that with the ELF section name.
    
    The fix is rather simple, and even removes duplicate memcmp code.
    Simply load program sections as the last step, instead of
    load_and_attach while processing the relocation section.
    
    When working with tail calls, it become even more essential that the
    order of prog_fd[] is consistant, like the current dependency of the
    map_fd[] order.
    Signed-off-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
    Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    7bc57950
bpf_load.c 17.9 KB