kernel/module.c: Mark module state before set RO and NX regions
PATCH 1/1 kernel/module.c: Mark module state before set RO and NX regions
In some architectures like arm/arm64, set_memory_*() check module address and state as well. Mark module state before set RO and NX regions for the routine is passed.
It will fix wrong RO/NX protection for loadable kernel modules on arm/arm64.
--- kernel/module.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
kernel/module.c +4 -3
@@ -3152,6 +3152,10 @@ static int complete_formation(struct module *mod, struct load_info *info)/* This relies on module_mutex for list integrity. */ module_bug_finalize (info->hdr, info->sechdrs, mod); +/* Mark state as coming so strong_try_module_get() ignores us, +* but kallsyms etc. can see us. */ + mod->state =MODULE_STATE_COMING ; +/* Set RO and NX regions for core */ set_section_ro_nx(mod->module_core, mod->core_text_size,
@@ -3164,9 +3168,6 @@ static int complete_formation(struct module *mod, struct load_info *info) mod->init_ro_size, mod->init_size); -/* Mark state as coming so strong_try_module_get() ignores us, -* but kallsyms etc. can see us. */ - mod->state =MODULE_STATE_COMING ;mutex_unlock (&module_mutex); blocking_notifier_call_chain(&module_notify_list,
Signature · 1 line
1.9.1
Quoted 5 lines · Jungseung Lee
In some architectures like arm/arm64, set_memory_*() check module address and state as well. Mark module state before set RO and NX regions for the routine is passed.
It will fix wrong RO/NX protection for loadable kernel modules on arm/arm64.
This partially reverts commit 4982223e51e8ea9d09bb33c8323b5ec1877b2b51
Author: Rusty Russell <[email protected]> Date: Wed May 14 10:54:19 2014 +0930
module: set nx before marking module MODULE_STATE_COMING.
Laura Abbott (CC'd) was looking at an alternative fix for this. Laura?
Thanks,
Rusty.
Quoted 32 lines
Signed-off-by Jungseung Lee <[email protected]>--- kernel/module.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)kernel/module.c +4
-3@@ -3152,6 +3152,10 @@ static int complete_formation(struct module *mod, struct load_info *info)/* This relies on module_mutex for list integrity. */ module_bug_finalize (info->hdr, info->sechdrs, mod); +/* Mark state as coming so strong_try_module_get() ignores us, +* but kallsyms etc. can see us. */ + mod->state =MODULE_STATE_COMING ; +/* Set RO and NX regions for core */ set_section_ro_nx(mod->module_core, mod->core_text_size,@@ -3164,9 +3168,6 @@ static int complete_formation(struct module *mod, struct load_info *info) mod->init_ro_size, mod->init_size); -/* Mark state as coming so strong_try_module_get() ignores us, -* but kallsyms etc. can see us. */ - mod->state =MODULE_STATE_COMING ;mutex_unlock (&module_mutex); blocking_notifier_call_chain(&module_notify_list,Signature · 1 line
1.9.1
Quoted 11 lines · Rusty Russell
Quoted 5 lines · Jungseung Lee
In some architectures like arm/arm64, set_memory_*() check module address and state as well. Mark module state before set RO and NX regions for the routine is passed.
It will fix wrong RO/NX protection for loadable kernel modules on arm/arm64.
This partially reverts commit
4982223e51e8ea9d09bb33c8323b5ec1877b2b51Author: Rusty Russell <[email protected]> Date: Wed May 14 10:54:19 2014 +0930
Quoted 7 lines
module: set nx before marking module
MODULE_STATE_COMING.Laura Abbott (CC'd) was looking at an alternative fix for this. Laura?
Thanks,
Rusty.
Yes, my proposal was to stop using is_module_address and just bounds check against the module ranges[1]. I got bogged down with other tasks and hadn't submitted a patch for review yet.
Thanks,
Laura
[1] http://lists.infradead.org/pipermail/linux-arm-kernel/2014-December/311574.html
Signature · 3 lines
Qualcomm Innovation Center, Inc. Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
2015-01-08 2:55 GMT+09:00 Laura Abbott <[email protected]>:
Quoted 20 lines · Rusty Russell
Quoted 19 lines
Quoted 7 lines · Jungseung Lee
In some architectures like arm/arm64, set_memory_*() check module address and state as well. Mark module state before set RO and NX regions for the routine is passed.
It will fix wrong RO/NX protection for loadable kernel modules on arm/arm64.
This partially reverts commit
4982223e51e8ea9d09bb33c8323b5ec1877b2b51Author: Rusty Russell <[email protected]> Date: Wed May 14 10:54:19 2014 +0930module: set nx before marking module
MODULE_STATE_COMING.Laura Abbott (CC'd) was looking at an alternative fix for this. Laura?
Quoted 8 lines
Quoted 3 lines
Thanks,
Rusty.Yes, my proposal was to stop using
is_module_addressand just bounds check against the module ranges[1]. I got bogged down with other tasks and hadn't submitted a patch for review yet.
I got it. I'll prepare bounds check patch for aarch32. Thanks,
Quoted 11 lines
Thanks,
Laura[1]
http://lists.infradead.org/pipermail/linux-arm-kernel/2014-December/311574.html--
Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project