Messages in this thread Patch in this message | | | Subject | Re: [patch 1/2] sched: Protect task->cpus_allowed access in sched_getaffinity() | From | Peter Zijlstra <> | Date | Wed, 09 Dec 2009 09:00:01 +0100 |
| |
On Tue, 2009-12-08 at 20:24 +0000, Thomas Gleixner wrote: > plain text document attachment > (sched-fix-sched-get-affinity-racy-access.patch) > sched_getaffinity() is not protected against a concurrent modification > of the tasks affinity. > > Serialize the access with task_rq_lock(task). > > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> > --- > kernel/sched.c | 4 ++++ > 1 file changed, 4 insertions(+) > > Index: linux-2.6-tip/kernel/sched.c > =================================================================== > --- linux-2.6-tip.orig/kernel/sched.c > +++ linux-2.6-tip/kernel/sched.c > @@ -6631,6 +6631,8 @@ SYSCALL_DEFINE3(sched_setaffinity, pid_t > long sched_getaffinity(pid_t pid, struct cpumask *mask) > { > struct task_struct *p; > + unsigned long flags; > + struct rq *rq; > int retval; > > get_online_cpus(); > @@ -6645,7 +6647,9 @@ long sched_getaffinity(pid_t pid, struct > if (retval) > goto out_unlock; > > + rq = task_rq_lock(p, &flags); > cpumask_and(mask, &p->cpus_allowed, cpu_online_mask); > + task_rq_unlock(rq, &flags); > > out_unlock: > read_unlock(&tasklist_lock); >
Hehe, I wrote the exact same patch last night :-)
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
| |