lkml.org 
[lkml]   [2019]   [Jan]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 17/17] module: Prevent module removal racing with text_poke()
On Wed, 16 Jan 2019 16:32:59 -0800
Rick Edgecombe <rick.p.edgecombe@intel.com> wrote:

> From: Nadav Amit <namit@vmware.com>
>
> It seems dangerous to allow code modifications to take place
> concurrently with module unloading. So take the text_mutex while the
> memory of the module is freed.

At that point, since the module itself is removed from module list,
it seems no actual harm. Or would you have any concern?

Thank you,

>
> Signed-off-by: Nadav Amit <namit@vmware.com>
> Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
> ---
> kernel/module.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/kernel/module.c b/kernel/module.c
> index 1af5c8e19086..90cfc4988d98 100644
> --- a/kernel/module.c
> +++ b/kernel/module.c
> @@ -64,6 +64,7 @@
> #include <linux/bsearch.h>
> #include <linux/dynamic_debug.h>
> #include <linux/audit.h>
> +#include <linux/memory.h>
> #include <uapi/linux/module.h>
> #include "module-internal.h"
>
> @@ -2157,6 +2158,9 @@ static void free_module(struct module *mod)
> synchronize_rcu();
> mutex_unlock(&module_mutex);
>
> + /* Protect against patching of the module while it is being removed */
> + mutex_lock(&text_mutex);
> +
> /* This may be empty, but that's OK */
> module_arch_freeing_init(mod);
> module_memfree(mod->init_layout.base);
> @@ -2168,6 +2172,7 @@ static void free_module(struct module *mod)
>
> /* Finally, free the core (containing the module structure) */
> module_memfree(mod->core_layout.base);
> + mutex_unlock(&text_mutex);
> }
>
> void *__symbol_get(const char *symbol)
> --
> 2.17.1
>


--
Masami Hiramatsu <mhiramat@kernel.org>

\
 
 \ /
  Last update: 2019-01-17 08:55    [W:0.273 / U:7.120 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site