Commit 42d7bdfc authored by Linus Torvalds's avatar Linus Torvalds Committed by Greg Kroah-Hartman

sgi-gru: decrapfiy options_write() function

commit d39b7dd1 upstream.

Not a single line of actual code in the function was really
fundamentally correct.

Problems ranged from lack of proper range checking, to removing the last
character written (which admittedly is usually '\n'), to not accepting
hex numbers even though the 'show' routine would show the data in that
format.

This tries to do better.
Acked-by: default avatarMichael Buesch <mb@bu3sch.de>
Tested-and-acked-by: default avatarJack Steiner <steiner@sgi.com>
Cc: Jiri Kosina <jkosina@suse.cz>
Cc: Michael Gilbert <michael.s.gilbert@gmail.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 9416d12b
...@@ -161,14 +161,15 @@ static int options_show(struct seq_file *s, void *p) ...@@ -161,14 +161,15 @@ static int options_show(struct seq_file *s, void *p)
static ssize_t options_write(struct file *file, const char __user *userbuf, static ssize_t options_write(struct file *file, const char __user *userbuf,
size_t count, loff_t *data) size_t count, loff_t *data)
{ {
unsigned long val; char buf[20];
char buf[80];
if (strncpy_from_user(buf, userbuf, sizeof(buf) - 1) < 0) if (count >= sizeof(buf))
return -EINVAL;
if (copy_from_user(buf, userbuf, count))
return -EFAULT; return -EFAULT;
buf[count - 1] = '\0'; buf[count] = '\0';
if (!strict_strtoul(buf, 10, &val)) if (strict_strtoul(buf, 0, &gru_options))
gru_options = val; return -EINVAL;
return count; return count;
} }
......
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