Skip to content

Commit

Permalink
sgi-gru: decrapfiy options_write() function
Browse files Browse the repository at this point in the history
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: Michael Buesch <mb@bu3sch.de>
Tested-and-acked-by: Jack Steiner <steiner@sgi.com>
Cc: stable@kernel.org
Cc: Jiri Kosina <jkosina@suse.cz>
Cc: Michael Gilbert <michael.s.gilbert@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Linus Torvalds committed Nov 5, 2009
1 parent 91d3f9b commit d39b7dd
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions drivers/misc/sgi-gru/gruprocfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
size_t count, loff_t *data)
{
unsigned long val;
char buf[80];
char buf[20];

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;
buf[count - 1] = '\0';
if (!strict_strtoul(buf, 10, &val))
gru_options = val;
buf[count] = '\0';
if (strict_strtoul(buf, 0, &gru_options))
return -EINVAL;

return count;
}
Expand Down

0 comments on commit d39b7dd

Please sign in to comment.