• Pablo Neira Ayuso's avatar
    netfilter: nf_tables: check for unset NFTA_SET_ELEM_LIST_ELEMENTS attribute · 7d5570ca
    Pablo Neira Ayuso authored
    Otherwise, the kernel oopses in nla_for_each_nested when iterating over
    the unset attribute NFTA_SET_ELEM_LIST_ELEMENTS in the
    nf_tables_{new,del}setelem() path.
    
    netlink: 65524 bytes leftover after parsing attributes in process `nft'.
    [...]
    Oops: 0000 [#1] SMP
    [...]
    CPU: 2 PID: 6287 Comm: nft Not tainted 3.16.0-rc2+ #169
    RIP: 0010:[<ffffffffa0526e61>]  [<ffffffffa0526e61>] nf_tables_newsetelem+0x82/0xec [nf_tables]
    [...]
    Call Trace:
     [<ffffffffa05178c4>] nfnetlink_rcv+0x2e7/0x3d7 [nfnetlink]
     [<ffffffffa0517939>] ? nfnetlink_rcv+0x35c/0x3d7 [nfnetlink]
     [<ffffffff8137d300>] netlink_unicast+0xf8/0x17a
     [<ffffffff8137d6a5>] netlink_sendmsg+0x323/0x351
    [...]
    
    Fix this by returning -EINVAL if this attribute is not set, which
    doesn't make sense at all since those commands are there to add and to
    delete elements from the set.
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    7d5570ca
nf_tables_api.c 95.2 KB