Messages in this thread Patch in this message | | | From | Vincent Li <> | Subject | [PATCH] fs/proc/base.c: fix proc_fault_inject_write() input sanity check | Date | Fri, 14 Aug 2009 13:18:40 -0700 |
| |
Remove obfuscated zero-length input check and return -EINVAL instead of -EIO error to make the error message clear to user. Add whitespace stripping. No functionality changes.
The old code:
echo 1 > /proc/pid/make-it-fail (ok) echo 1foo > /proc/pid/make-it-fail (-bash: echo: write error: Input/output error)
The new code:
echo 1 > /proc/pid/make-it-fail (ok) echo 1foo > /proc/pid/make-it-fail (-bash: echo: write error: Invalid argument)
This patch is conservative in changes to not breaking existing scripts/applications. based on v2.6.31-rc6, compiled and tested ok.
Signed-off-by: Vincent Li <macli@brc.ubc.ca> --- fs/proc/base.c | 11 +++++------ 1 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/fs/proc/base.c b/fs/proc/base.c index 175db25..ba345d9 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -1182,17 +1182,16 @@ static ssize_t proc_fault_inject_write(struct file * file, count = sizeof(buffer) - 1; if (copy_from_user(buffer, buf, count)) return -EFAULT; - make_it_fail = simple_strtol(buffer, &end, 0); - if (*end == '\n') - end++; + make_it_fail = simple_strtol(strstrip(buffer), &end, 0); + if (*end) + return -EINVAL; task = get_proc_task(file->f_dentry->d_inode); if (!task) return -ESRCH; task->make_it_fail = make_it_fail; put_task_struct(task); - if (end - buffer == 0) - return -EIO; - return end - buffer; + + return count; } static const struct file_operations proc_fault_inject_operations = { -- 1.6.0.4
| |