• Kui-Feng Lee's avatar
    bpf: pass attached BTF to the bpf_struct_ops subsystem · fcc2c1fb
    Kui-Feng Lee authored
    Pass the fd of a btf from the userspace to the bpf() syscall, and then
    convert the fd into a btf. The btf is generated from the module that
    defines the target BPF struct_ops type.
    
    In order to inform the kernel about the module that defines the target
    struct_ops type, the userspace program needs to provide a btf fd for the
    respective module's btf. This btf contains essential information on the
    types defined within the module, including the target struct_ops type.
    
    A btf fd must be provided to the kernel for struct_ops maps and for the bpf
    programs attached to those maps.
    
    In the case of the bpf programs, the attach_btf_obj_fd parameter is passed
    as part of the bpf_attr and is converted into a btf. This btf is then
    stored in the prog->aux->attach_btf field. Here, it just let the verifier
    access attach_btf directly.
    
    In the case of struct_ops maps, a btf fd is passed as value_type_btf_obj_fd
    of bpf_attr. The bpf_struct_ops_map_alloc() function converts the fd to a
    btf and stores it as st_map->btf. A flag BPF_F_VTYPE_BTF_OBJ_FD is added
    for map_flags to indicate that the value of value_type_btf_obj_fd is set.
    Signed-off-by: default avatarKui-Feng Lee <thinker.li@gmail.com>
    Link: https://lore.kernel.org/r/20240119225005.668602-9-thinker.li@gmail.comSigned-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
    fcc2c1fb
bpf_struct_ops.c 25.3 KB