• Nikolay Aleksandrov's avatar
    net: netlink: cap max groups which will be considered in netlink_bind() · 3a20773b
    Nikolay Aleksandrov authored
    Since nl_groups is a u32 we can't bind more groups via ->bind
    (netlink_bind) call, but netlink has supported more groups via
    setsockopt() for a long time and thus nlk->ngroups could be over 32.
    Recently I added support for per-vlan notifications and increased the
    groups to 33 for NETLINK_ROUTE which exposed an old bug in the
    netlink_bind() code causing out-of-bounds access on archs where unsigned
    long is 32 bits via test_bit() on a local variable. Fix this by capping the
    maximum groups in netlink_bind() to BITS_PER_TYPE(u32), effectively
    capping them at 32 which is the minimum of allocated groups and the
    maximum groups which can be bound via netlink_bind().
    
    CC: Christophe Leroy <christophe.leroy@c-s.fr>
    CC: Richard Guy Briggs <rgb@redhat.com>
    Fixes: 4f520900 ("netlink: have netlink per-protocol bind function return an error code.")
    Reported-by: default avatarErhard F. <erhard_f@mailbox.org>
    Signed-off-by: default avatarNikolay Aleksandrov <nikolay@cumulusnetworks.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3a20773b
af_netlink.c 65.1 KB