From ba9f8fa3d2185b3fef61ca44efb706f769eabe21 Mon Sep 17 00:00:00 2001 From: Roman Zippel Date: Tue, 31 May 2005 14:39:29 -0700 Subject: [PATCH] --- yaml --- r: 1723 b: refs/heads/master c: ae92ef8a442421356950a0a8dfdc35e8e783000e h: refs/heads/master i: 1721: cc0e6229494efdf785dcce67e9b2f54c023517cb 1719: 2d373c587fc66939019c31ce6aee7d7f1f6ce9c9 v: v3 --- [refs] | 2 +- trunk/kernel/module.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index c798ab3e64d8..0d99a1834195 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f50734569c25c4e902bd3d0fb2e5bd93a200cc75 +refs/heads/master: ae92ef8a442421356950a0a8dfdc35e8e783000e diff --git a/trunk/kernel/module.c b/trunk/kernel/module.c index 5734ab09d3f9..83b3d376708c 100644 --- a/trunk/kernel/module.c +++ b/trunk/kernel/module.c @@ -1758,6 +1758,7 @@ sys_init_module(void __user *umod, const char __user *uargs) { struct module *mod; + mm_segment_t old_fs = get_fs(); int ret = 0; /* Must have permission */ @@ -1775,6 +1776,9 @@ sys_init_module(void __user *umod, return PTR_ERR(mod); } + /* flush the icache in correct context */ + set_fs(KERNEL_DS); + /* Flush the instruction cache, since we've played with text */ if (mod->module_init) flush_icache_range((unsigned long)mod->module_init, @@ -1783,6 +1787,8 @@ sys_init_module(void __user *umod, flush_icache_range((unsigned long)mod->module_core, (unsigned long)mod->module_core + mod->core_size); + set_fs(old_fs); + /* Now sew it into the lists. They won't access us, since strong_try_module_get() will fail. */ stop_machine_run(__link_module, mod, NR_CPUS);