sched: hmp: Fix potential task_struct memory leak
authorChris Redpath <chris.redpath@arm.com>
Fri, 10 Jan 2014 10:34:08 +0000 (10:34 +0000)
committerJon Medhurst <tixy@linaro.org>
Wed, 22 Jan 2014 09:50:45 +0000 (09:50 +0000)
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>
kernel/sched/fair.c

index d89f4a8ddf4119d88f97ae8a84b26f55717d7bf3..43857fec77be7fb860038df0b2e9f3025b8e065b 100644 (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);