From c3349e122d13cddd96b9eb53f1bc9a795175e5e1 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 31 Mar 2009 13:05:35 -0600 Subject: [PATCH] --- yaml --- r: 140525 b: refs/heads/master c: e91defa26c527ceeaff6266c55cdc7e17c9081a2 h: refs/heads/master i: 140523: 4a3150a894526ebebff2f7da0ea678fe9e4ad0d0 v: v3 --- [refs] | 2 +- trunk/kernel/module.c | 12 +++--------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index e6574d03df2c..f27a42da299d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: acae05156551fd7528fbb616271e672789388e3c +refs/heads/master: e91defa26c527ceeaff6266c55cdc7e17c9081a2 diff --git a/trunk/kernel/module.c b/trunk/kernel/module.c index e8cf636e614b..1a9a3986b136 100644 --- a/trunk/kernel/module.c +++ b/trunk/kernel/module.c @@ -1912,12 +1912,6 @@ static noinline struct module *load_module(void __user *umod, if (len > 64 * 1024 * 1024 || (hdr = vmalloc(len)) == NULL) return ERR_PTR(-ENOMEM); - /* Create stop_machine threads since the error path relies on - * a non-failing stop_machine call. */ - err = stop_machine_create(); - if (err) - goto free_hdr; - if (copy_from_user(hdr, umod, len) != 0) { err = -EFAULT; goto free_hdr; @@ -2303,12 +2297,13 @@ static noinline struct module *load_module(void __user *umod, /* Get rid of temporary copy */ vfree(hdr); - stop_machine_destroy(); /* Done! */ return mod; unlink: - stop_machine(__unlink_module, mod, NULL); + /* Unlink carefully: kallsyms could be walking list. */ + list_del_rcu(&mod->list); + synchronize_sched(); module_arch_cleanup(mod); cleanup: kobject_del(&mod->mkobj.kobj); @@ -2331,7 +2326,6 @@ static noinline struct module *load_module(void __user *umod, kfree(args); free_hdr: vfree(hdr); - stop_machine_destroy(); return ERR_PTR(err); truncated: