• Toke Høiland-Jørgensen's avatar
    bpf: Resolve fext program type when checking map compatibility · 1c123c56
    Toke Høiland-Jørgensen authored
    The bpf_prog_map_compatible() check makes sure that BPF program types are
    not mixed inside BPF map types that can contain programs (tail call maps,
    cpumaps and devmaps). It does this by setting the fields of the map->owner
    struct to the values of the first program being checked against, and
    rejecting any subsequent programs if the values don't match.
    
    One of the values being set in the map owner struct is the program type,
    and since the code did not resolve the prog type for fext programs, the map
    owner type would be set to PROG_TYPE_EXT and subsequent loading of programs
    of the target type into the map would fail.
    
    This bug is seen in particular for XDP programs that are loaded as
    PROG_TYPE_EXT using libxdp; these cannot insert programs into devmaps and
    cpumaps because the check fails as described above.
    
    Fix the bug by resolving the fext program type to its target program type
    as elsewhere in the verifier.
    
    v3:
    - Add Yonghong's ACK
    
    Fixes: f45d5b6c ("bpf: generalise tail call map compatibility check")
    Acked-by: default avatarYonghong Song <yhs@fb.com>
    Signed-off-by: default avatarToke Høiland-Jørgensen <toke@redhat.com>
    Link: https://lore.kernel.org/r/20221214230254.790066-1-toke@redhat.comSigned-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
    1c123c56
core.c 71.7 KB