]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
kprobes: handle empty/invalid input to debugfs "enabled" file
authorMathias Krause <minipli@googlemail.com>
Wed, 3 Jul 2013 22:05:39 +0000 (15:05 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 3 Jul 2013 23:07:46 +0000 (16:07 -0700)
When writing invalid input to 'debug/kprobes/enabled' it'll silently be
ignored.  Even worse, when writing an empty string to this file, the
outcome is purely random as the switch statement will make its decision
based on the value of an uninitialized stack variable.

Fix this by handling invalid/empty input as error returning -EINVAL.

Signed-off-by: Mathias Krause <minipli@googlemail.com>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Cc: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
kernel/kprobes.c

index bddf3b201a480015e2b1b15c217c43ea6796fcd0..6e33498d665c3caa35ac764a46dd27c7cec80685 100644 (file)
@@ -2332,6 +2332,7 @@ static ssize_t write_enabled_file_bool(struct file *file,
        if (copy_from_user(buf, user_buf, buf_size))
                return -EFAULT;
 
+       buf[buf_size] = '\0';
        switch (buf[0]) {
        case 'y':
        case 'Y':
@@ -2343,6 +2344,8 @@ static ssize_t write_enabled_file_bool(struct file *file,
        case '0':
                disarm_all_kprobes();
                break;
+       default:
+               return -EINVAL;
        }
 
        return count;