sched: hmp: Fix potential task_struct memory leak

We use get_task_struct to increment the ref count on a task_struct
so that even if the task dies with a pending migration we are still
able to read the memory without causing a fault.

In the case of non-running tasks, we forgot to decrement the ref
count when we are done with the task.

Signed-off-by: Chris Redpath <chris.redpath@arm.com>
Signed-off-by: Jon Medhurst <tixy@linaro.org>
This commit is contained in:
Chris Redpath
2014-01-10 10:34:08 +00:00
committed by Jon Medhurst
parent 5e0791511a
commit b2fafaba35

View File

@@ -7027,13 +7027,13 @@ static void hmp_migrate_runnable_task(struct rq *rq)
* with the source rq.
*/
if (src_rq->active_balance)
return;
goto out;
if (src_rq->nr_running <= 1)
return;
goto out;
if (task_rq(p) != src_rq)
return;
goto out;
/*
* Not sure if this applies here but one can never
* be too cautious
@@ -7068,6 +7068,8 @@ static void hmp_migrate_runnable_task(struct rq *rq)
rcu_read_unlock();
double_unlock_balance(src_rq, dst_rq);
out:
put_task_struct(p);
}
static DEFINE_SPINLOCK(hmp_force_migration);