"Search through everything else" in mm_update_next_owner() can
hit a kthread which adopted this "mm" via use_mm(), it should
not be used as mm->owner. Add the PF_KTHREAD check.

While at it, change this code to use for_each_process_thread()
instead of deprecated do_each_thread/while_each_thread.

Signed-off-by: Oleg Nesterov <o...@redhat.com>
Reviewed-by: Michal Hocko <mho...@suse.cz>
---
 kernel/exit.c |   10 ++++------
 1 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/kernel/exit.c b/kernel/exit.c
index ad7183a..e270d2a 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -356,14 +356,12 @@ retry:
        }
 
        /*
-        * Search through everything else. We should not get
-        * here often
+        * Search through everything else, we should not get here often.
         */
-       do_each_thread(g, c) {
-               if (c->mm == mm)
+       for_each_process_thread(g, c) {
+               if (!(c->flags & PF_KTHREAD) && c->mm == mm)
                        goto assign_new_owner;
-       } while_each_thread(g, c);
-
+       }
        read_unlock(&tasklist_lock);
        /*
         * We found no owner yet mm_users > 1: this implies that we are
-- 
1.5.5.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to