• Andrii Nakryiko's avatar
    libbpf: Make bpf_map order and indices stable · 492ab020
    Andrii Nakryiko authored
    Currently, libbpf re-sorts bpf_map structs after all the maps are added and
    initialized, which might change their relative order and invalidate any
    bpf_map pointer or index taken before that. This is inconvenient and
    error-prone. For instance, it can cause .kconfig map index to point to a wrong
    map.
    
    Furthermore, libbpf itself doesn't rely on any specific ordering of bpf_maps,
    so it's just an unnecessary complication right now. This patch drops sorting
    of maps and makes their relative positions fixed. If efficient index is ever
    needed, it's better to have a separate array of pointers as a search index,
    instead of reordering bpf_map struct in-place. This will be less error-prone
    and will allow multiple independent orderings, if necessary (e.g., either by
    section index or by name).
    
    Fixes: 166750bc ("libbpf: Support libbpf-provided extern variables")
    Reported-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Signed-off-by: default avatarAndrii Nakryiko <andriin@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20200110034247.1220142-1-andriin@fb.com
    492ab020
libbpf.c 206 KB