netfilter: x_tables: check for size overflow
authorFlorian Westphal <fw@strlen.de>
Tue, 30 Aug 2016 04:35:04 +0000 (00:35 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 15 Sep 2016 06:27:50 +0000 (08:27 +0200)
[ Upstream commit d157bd761585605b7882935ffb86286919f62ea1 ]

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>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/netfilter/x_tables.c

index c7b7cecb5bd1a47eed9ea53d3e71dc159d68f8fb..2fc6ca9d12866432f09d01d8807698b77723e168 100644 (file)
@@ -897,6 +897,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;
+
        if (sz < sizeof(*info))
                return NULL;