Commit aa434577 authored by Adam Manzanares's avatar Adam Manzanares Committed by Al Viro

block: add ioprio_check_cap function

Aio per command iopriority support introduces a second interface between
userland and the kernel capable of passing iopriority. The aio interface also
needs the ability to verify that the submitting context has sufficient
privileges to submit IOPRIO_RT commands. This patch creates the
ioprio_check_cap function to be used by the ioprio_set system call and also by
the aio interface.
Signed-off-by: default avatarAdam Manzanares <adam.manzanares@wdc.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarJeff Moyer <jmoyer@redhat.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 1da92779
...@@ -61,15 +61,10 @@ int set_task_ioprio(struct task_struct *task, int ioprio) ...@@ -61,15 +61,10 @@ int set_task_ioprio(struct task_struct *task, int ioprio)
} }
EXPORT_SYMBOL_GPL(set_task_ioprio); EXPORT_SYMBOL_GPL(set_task_ioprio);
SYSCALL_DEFINE3(ioprio_set, int, which, int, who, int, ioprio) int ioprio_check_cap(int ioprio)
{ {
int class = IOPRIO_PRIO_CLASS(ioprio); int class = IOPRIO_PRIO_CLASS(ioprio);
int data = IOPRIO_PRIO_DATA(ioprio); int data = IOPRIO_PRIO_DATA(ioprio);
struct task_struct *p, *g;
struct user_struct *user;
struct pid *pgrp;
kuid_t uid;
int ret;
switch (class) { switch (class) {
case IOPRIO_CLASS_RT: case IOPRIO_CLASS_RT:
...@@ -92,6 +87,21 @@ SYSCALL_DEFINE3(ioprio_set, int, which, int, who, int, ioprio) ...@@ -92,6 +87,21 @@ SYSCALL_DEFINE3(ioprio_set, int, which, int, who, int, ioprio)
return -EINVAL; return -EINVAL;
} }
return 0;
}
SYSCALL_DEFINE3(ioprio_set, int, which, int, who, int, ioprio)
{
struct task_struct *p, *g;
struct user_struct *user;
struct pid *pgrp;
kuid_t uid;
int ret;
ret = ioprio_check_cap(ioprio);
if (ret)
return ret;
ret = -ESRCH; ret = -ESRCH;
rcu_read_lock(); rcu_read_lock();
switch (which) { switch (which) {
......
...@@ -77,4 +77,6 @@ extern int ioprio_best(unsigned short aprio, unsigned short bprio); ...@@ -77,4 +77,6 @@ extern int ioprio_best(unsigned short aprio, unsigned short bprio);
extern int set_task_ioprio(struct task_struct *task, int ioprio); extern int set_task_ioprio(struct task_struct *task, int ioprio);
extern int ioprio_check_cap(int ioprio);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment