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: Adam Manzanares <adam.manzanares@wdc.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Jeff Moyer <jmoyer@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
1da92779e2
commit
aa43457799
|
@ -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)
|
||||||
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);
|
||||||
|
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue