Skip to content
  • Dave Jones's avatar
    netfilter: ensure number of counters is >0 in do_replace() · 1086bbe9
    Dave Jones authored
    
    
    After improving setsockopt() coverage in trinity, I started triggering
    vmalloc failures pretty reliably from this code path:
    
    warn_alloc_failed+0xe9/0x140
    __vmalloc_node_range+0x1be/0x270
    vzalloc+0x4b/0x50
    __do_replace+0x52/0x260 [ip_tables]
    do_ipt_set_ctl+0x15d/0x1d0 [ip_tables]
    nf_setsockopt+0x65/0x90
    ip_setsockopt+0x61/0xa0
    raw_setsockopt+0x16/0x60
    sock_common_setsockopt+0x14/0x20
    SyS_setsockopt+0x71/0xd0
    
    It turns out we don't validate that the num_counters field in the
    struct we pass in from userspace is initialized.
    
    The same problem also exists in ebtables, arptables, ipv6, and the
    compat variants.
    
    Signed-off-by: default avatarDave Jones <davej@codemonkey.org.uk>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    1086bbe9