diff options
author | Vincent Li <macli@brc.ubc.ca> | 2009-09-22 19:45:38 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-23 10:39:40 -0400 |
commit | cba8aafe1e07dfc8bae5ba78be8e02883bd34d31 (patch) | |
tree | 473586963e635921613db5e4ae8ac339ae497a18 /fs/proc | |
parent | fb92a4b068be96799da3748c11cbd69760e44d7b (diff) |
fs/proc/base.c: fix proc_fault_inject_write() input sanity check
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.
Signed-off-by: Vincent Li <macli@brc.ubc.ca>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/proc')
-rw-r--r-- | 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 5bc587049b37..837469a96598 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c | |||
@@ -1187,17 +1187,16 @@ static ssize_t proc_fault_inject_write(struct file * file, | |||
1187 | count = sizeof(buffer) - 1; | 1187 | count = sizeof(buffer) - 1; |
1188 | if (copy_from_user(buffer, buf, count)) | 1188 | if (copy_from_user(buffer, buf, count)) |
1189 | return -EFAULT; | 1189 | return -EFAULT; |
1190 | make_it_fail = simple_strtol(buffer, &end, 0); | 1190 | make_it_fail = simple_strtol(strstrip(buffer), &end, 0); |
1191 | if (*end == '\n') | 1191 | if (*end) |
1192 | end++; | 1192 | return -EINVAL; |
1193 | task = get_proc_task(file->f_dentry->d_inode); | 1193 | task = get_proc_task(file->f_dentry->d_inode); |
1194 | if (!task) | 1194 | if (!task) |
1195 | return -ESRCH; | 1195 | return -ESRCH; |
1196 | task->make_it_fail = make_it_fail; | 1196 | task->make_it_fail = make_it_fail; |
1197 | put_task_struct(task); | 1197 | put_task_struct(task); |
1198 | if (end - buffer == 0) | 1198 | |
1199 | return -EIO; | 1199 | return count; |
1200 | return end - buffer; | ||
1201 | } | 1200 | } |
1202 | 1201 | ||
1203 | static const struct file_operations proc_fault_inject_operations = { | 1202 | static const struct file_operations proc_fault_inject_operations = { |