• Andrii Nakryiko's avatar
    libbpf: Allow to opt-out from creating BPF maps · ec41817b
    Andrii Nakryiko authored
    Add bpf_map__set_autocreate() API that allows user to opt-out from
    libbpf automatically creating BPF map during BPF object load.
    
    This is a useful feature when building CO-RE-enabled BPF application
    that takes advantage of some new-ish BPF map type (e.g., socket-local
    storage) if kernel supports it, but otherwise uses some alternative way
    (e.g., extra HASH map). In such case, being able to disable the creation
    of a map that kernel doesn't support allows to successfully create and
    load BPF object file with all its other maps and programs.
    
    It's still up to user to make sure that no "live" code in any of their BPF
    programs are referencing such map instance, which can be achieved by
    guarding such code with CO-RE relocation check or by using .rodata
    global variables.
    
    If user fails to properly guard such code to turn it into "dead code",
    libbpf will helpfully post-process BPF verifier log and will provide
    more meaningful error and map name that needs to be guarded properly. As
    such, instead of:
    
      ; value = bpf_map_lookup_elem(&missing_map, &zero);
      4: (85) call unknown#2001000000
      invalid func unknown#2001000000
    
    ... user will see:
    
      ; value = bpf_map_lookup_elem(&missing_map, &zero);
      4: <invalid BPF map reference>
      BPF map 'missing_map' is referenced but wasn't created
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20220428041523.4089853-4-andrii@kernel.org
    ec41817b
libbpf.map 9.73 KB