Commit 961ed183 authored by Vasiliy Kulikov's avatar Vasiliy Kulikov Committed by Patrick McHardy

netfilter: ipt_CLUSTERIP: fix buffer overflow

'buffer' string is copied from userspace.  It is not checked whether it is
zero terminated.  This may lead to overflow inside of simple_strtoul().
Changli Gao suggested to copy not more than user supplied 'size' bytes.

It was introduced before the git epoch.  Files "ipt_CLUSTERIP/*" are
root writable only by default, however, on some setups permissions might be
relaxed to e.g. network admin user.
Signed-off-by: default avatarVasiliy Kulikov <segoon@openwall.com>
Acked-by: default avatarChangli Gao <xiaosuo@gmail.com>
Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
parent db856674
...@@ -664,8 +664,11 @@ static ssize_t clusterip_proc_write(struct file *file, const char __user *input, ...@@ -664,8 +664,11 @@ static ssize_t clusterip_proc_write(struct file *file, const char __user *input,
char buffer[PROC_WRITELEN+1]; char buffer[PROC_WRITELEN+1];
unsigned long nodenum; unsigned long nodenum;
if (copy_from_user(buffer, input, PROC_WRITELEN)) if (size > PROC_WRITELEN)
return -EIO;
if (copy_from_user(buffer, input, size))
return -EFAULT; return -EFAULT;
buffer[size] = 0;
if (*buffer == '+') { if (*buffer == '+') {
nodenum = simple_strtoul(buffer+1, NULL, 10); nodenum = simple_strtoul(buffer+1, NULL, 10);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment