netfilter: x_tables: check for size overflow
authorFlorian Westphal <fw@strlen.de>
Thu, 10 Mar 2016 00:56:23 +0000 (01:56 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Sat, 12 Mar 2016 10:55:01 +0000 (11:55 +0100)
Ben Hawkes says:
 integer overflow in xt_alloc_table_info, which on 32-bit systems can
 lead to small structure allocation and a copy_from_user based heap
 corruption.

Reported-by: Ben Hawkes <hawkes@google.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/x_tables.c

index d0cd2b9bf84463af1028d00ce87d2f5aab1dc736..582c9cfd6567ce4c7d5b3f86c15732b33a63e1b4 100644 (file)
@@ -659,6 +659,9 @@ struct xt_table_info *xt_alloc_table_info(unsigned int size)
        struct xt_table_info *info = NULL;
        size_t sz = sizeof(*info) + size;
 
+       if (sz < sizeof(*info))
+               return NULL;
+
        /* Pedantry: prevent them from hitting BUG() in vmalloc.c --RR */
        if ((SMP_ALIGN(size) >> PAGE_SHIFT) + 2 > totalram_pages)
                return NULL;