Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Vincent Li and committed by
Linus Torvalds
cba8aafe fb92a4b0

+5 -6
+5 -6
fs/proc/base.c
··· 1187 1187 count = sizeof(buffer) - 1; 1188 1188 if (copy_from_user(buffer, buf, count)) 1189 1189 return -EFAULT; 1190 - make_it_fail = simple_strtol(buffer, &end, 0); 1191 - if (*end == '\n') 1192 - end++; 1190 + make_it_fail = simple_strtol(strstrip(buffer), &end, 0); 1191 + if (*end) 1192 + return -EINVAL; 1193 1193 task = get_proc_task(file->f_dentry->d_inode); 1194 1194 if (!task) 1195 1195 return -ESRCH; 1196 1196 task->make_it_fail = make_it_fail; 1197 1197 put_task_struct(task); 1198 - if (end - buffer == 0) 1199 - return -EIO; 1200 - return end - buffer; 1198 + 1199 + return count; 1201 1200 } 1202 1201 1203 1202 static const struct file_operations proc_fault_inject_operations = {