• Jonathan Lemon's avatar
    bpf: lpm_trie: check left child of last leftmost node for NULL · da2577fd
    Jonathan Lemon authored
    If the leftmost parent node of the tree has does not have a child
    on the left side, then trie_get_next_key (and bpftool map dump) will
    not look at the child on the right.  This leads to the traversal
    missing elements.
    
    Lookup is not affected.
    
    Update selftest to handle this case.
    
    Reproducer:
    
     bpftool map create /sys/fs/bpf/lpm type lpm_trie key 6 \
         value 1 entries 256 name test_lpm flags 1
     bpftool map update pinned /sys/fs/bpf/lpm key  8 0 0 0  0   0 value 1
     bpftool map update pinned /sys/fs/bpf/lpm key 16 0 0 0  0 128 value 2
     bpftool map dump   pinned /sys/fs/bpf/lpm
    
    Returns only 1 element. (2 expected)
    
    Fixes: b471f2f1 ("bpf: implement MAP_GET_NEXT_KEY command for LPM_TRIE")
    Signed-off-by: default avatarJonathan Lemon <jonathan.lemon@gmail.com>
    Acked-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    da2577fd
lpm_trie.c 21.4 KB