bridge: netfilter: fix information leak
authorVasiliy Kulikov <segoon@openwall.com>
Mon, 14 Feb 2011 15:49:23 +0000 (16:49 +0100)
committerPatrick McHardy <kaber@trash.net>
Mon, 14 Feb 2011 15:49:23 +0000 (16:49 +0100)
Struct tmp is copied from userspace.  It is not checked whether the "name"
field is NULL terminated.  This may lead to buffer overflow and passing
contents of kernel stack as a module name to try_then_request_module() and,
consequently, to modprobe commandline.  It would be seen by all userspace
processes.

Signed-off-by: Vasiliy Kulikov <segoon@openwall.com>
Signed-off-by: Patrick McHardy <kaber@trash.net>
net/bridge/netfilter/ebtables.c

index 5f1825df9dcad7cb546ae7b4b8182210cd60d7a5..893669caa8de6c56960f804da8d2125f07823fb3 100644 (file)
@@ -1107,6 +1107,8 @@ static int do_replace(struct net *net, const void __user *user,
        if (tmp.num_counters >= INT_MAX / sizeof(struct ebt_counter))
                return -ENOMEM;
 
+       tmp.name[sizeof(tmp.name) - 1] = 0;
+
        countersize = COUNTER_OFFSET(tmp.nentries) * nr_cpu_ids;
        newinfo = vmalloc(sizeof(*newinfo) + countersize);
        if (!newinfo)