• Daniel Borkmann's avatar
    bpf, lpm: fix overflows in trie_alloc checks · c502faf9
    Daniel Borkmann authored
    Cap the maximum (total) value size and bail out if larger than KMALLOC_MAX_SIZE
    as otherwise it doesn't make any sense to proceed further, since we're
    guaranteed to fail to allocate elements anyway in lpm_trie_node_alloc();
    likleyhood of failure is still high for large values, though, similarly
    as with htab case in non-prealloc.
    
    Next, make sure that cost vars are really u64 instead of size_t, so that we
    don't overflow on 32 bit and charge only tiny map.pages against memlock while
    allowing huge max_entries; cap also the max cost like we do with other map
    types.
    
    Fixes: b95a5c4d ("bpf: add a longest prefix match trie map implementation")
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    c502faf9
lpm_trie.c 14.6 KB