diff options
| author | Rusty Russell <[email protected]> | 2008-06-23 13:55:38 +1000 |
|---|---|---|
| committer | Ingo Molnar <[email protected]> | 2008-06-23 22:57:56 +0200 |
| commit | 961ccddd59d627b89bd3dc284b6517833bbdf25d (patch) | |
| tree | 4d755085845b8beeaa0bbc3d3ee66e1ccc4156a8 /include | |
| parent | 481c5346d0981940ee63037eb53e4e37b0735c10 (diff) | |
sched: add new API sched_setscheduler_nocheck: add a flag to control access checks
Hidehiro Kawai noticed that sched_setscheduler() can fail in
stop_machine: it calls sched_setscheduler() from insmod, which can
have CAP_SYS_MODULE without CAP_SYS_NICE.
Two cases could have failed, so are changed to sched_setscheduler_nocheck:
kernel/softirq.c:cpu_callback()
- CPU hotplug callback
kernel/stop_machine.c:__stop_machine_run()
- Called from various places, including modprobe()
Signed-off-by: Rusty Russell <[email protected]>
Cc: Jeremy Fitzhardinge <[email protected]>
Cc: Hidehiro Kawai <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: [email protected]
Cc: sugita <[email protected]>
Cc: Satoshi OSHIMA <[email protected]>
Signed-off-by: Ingo Molnar <[email protected]>
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/sched.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h index c5d3f847ca8d..fe3b9b5d7390 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1655,6 +1655,8 @@ extern int can_nice(const struct task_struct *p, const int nice); extern int task_curr(const struct task_struct *p); extern int idle_cpu(int cpu); extern int sched_setscheduler(struct task_struct *, int, struct sched_param *); +extern int sched_setscheduler_nocheck(struct task_struct *, int, + struct sched_param *); extern struct task_struct *idle_task(int cpu); extern struct task_struct *curr_task(int cpu); extern void set_curr_task(int cpu, struct task_struct *p); |