mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
fault-inject: simplify access check for fail-nth
The fail-nth file is created with 0666 and the access is permitted if and only if the task is current. This file is owned by the currnet user. So we can create it with 0644 and allow the owner to write it. This enables to watch the status of task->fail_nth from another processes. [[email protected]: don't convert unsigned type value as signed int] Link: http://lkml.kernel.org/r/[email protected] [[email protected]: avoid unwanted data race to task->fail_nth] Link: http://lkml.kernel.org/r/[email protected] Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Akinobu Mita <[email protected]> Acked-by: Dmitry Vyukov <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
bfc740938d
commit
1203c8e6fb
2 changed files with 15 additions and 17 deletions
|
|
@ -1363,16 +1363,16 @@ static ssize_t proc_fail_nth_write(struct file *file, const char __user *buf,
|
|||
int err;
|
||||
unsigned int n;
|
||||
|
||||
task = get_proc_task(file_inode(file));
|
||||
if (!task)
|
||||
return -ESRCH;
|
||||
put_task_struct(task);
|
||||
if (task != current)
|
||||
return -EPERM;
|
||||
err = kstrtouint_from_user(buf, count, 0, &n);
|
||||
if (err)
|
||||
return err;
|
||||
current->fail_nth = n;
|
||||
|
||||
task = get_proc_task(file_inode(file));
|
||||
if (!task)
|
||||
return -ESRCH;
|
||||
WRITE_ONCE(task->fail_nth, n);
|
||||
put_task_struct(task);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
|
|
@ -1386,11 +1386,10 @@ static ssize_t proc_fail_nth_read(struct file *file, char __user *buf,
|
|||
task = get_proc_task(file_inode(file));
|
||||
if (!task)
|
||||
return -ESRCH;
|
||||
put_task_struct(task);
|
||||
if (task != current)
|
||||
return -EPERM;
|
||||
len = snprintf(numbuf, sizeof(numbuf), "%u\n", task->fail_nth);
|
||||
len = snprintf(numbuf, sizeof(numbuf), "%u\n",
|
||||
READ_ONCE(task->fail_nth));
|
||||
len = simple_read_from_buffer(buf, count, ppos, numbuf, len);
|
||||
put_task_struct(task);
|
||||
|
||||
return len;
|
||||
}
|
||||
|
|
@ -3355,11 +3354,7 @@ static const struct pid_entry tid_base_stuff[] = {
|
|||
#endif
|
||||
#ifdef CONFIG_FAULT_INJECTION
|
||||
REG("make-it-fail", S_IRUGO|S_IWUSR, proc_fault_inject_operations),
|
||||
/*
|
||||
* Operations on the file check that the task is current,
|
||||
* so we create it with 0666 to support testing under unprivileged user.
|
||||
*/
|
||||
REG("fail-nth", 0666, proc_fail_nth_operations),
|
||||
REG("fail-nth", 0644, proc_fail_nth_operations),
|
||||
#endif
|
||||
#ifdef CONFIG_TASK_IO_ACCOUNTING
|
||||
ONE("io", S_IRUSR, proc_tid_io_accounting),
|
||||
|
|
|
|||
Loading…
Reference in a new issue