• Quentin Monnet's avatar
    libbpf: prevent overwriting of log_level in bpf_object__load_progs() · 501b125a
    Quentin Monnet authored
    There are two functions in libbpf that support passing a log_level
    parameter for the verifier for loading programs:
    bpf_object__load_xattr() and bpf_prog_load_xattr(). Both accept an
    attribute object containing the log_level, and apply it to the programs
    to load.
    
    It turns out that to effectively load the programs, the latter function
    eventually relies on the former. This was not taken into account when
    adding support for log_level in bpf_object__load_xattr(), and the
    log_level passed to bpf_prog_load_xattr() later gets overwritten with a
    zero value, thus disabling verifier logs for the program in all cases:
    
    bpf_prog_load_xattr()             // prog->log_level = attr1->log_level;
    -> bpf_object__load()             // attr2->log_level = 0;
       -> bpf_object__load_xattr()    // <pass prog and attr2>
          -> bpf_object__load_progs() // prog->log_level = attr2->log_level;
    
    Fix this by OR-ing the log_level in bpf_object__load_progs(), instead of
    overwriting it.
    
    v2: Fix commit log description (confusion on function names in v1).
    
    Fixes: 60276f98 ("libbpf: add bpf_object__load_xattr() API function to pass log_level")
    Reported-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Signed-off-by: default avatarQuentin Monnet <quentin.monnet@netronome.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    501b125a
libbpf.c 89.7 KB