All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jessica Yu <jeyu@kernel.org>
To: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Joel Fernandes <joel@joelfernandes.org>,
	Ingo Molnar <mingo@kernel.org>,
	Anders Roxell <anders.roxell@linaro.org>,
	paulmck@kernel.org, "Naveen N . Rao" <naveen.n.rao@linux.ibm.com>,
	Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>,
	David Miller <davem@davemloft.net>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] modules: lockdep: Suppress suspicious RCU usage warning
Date: Thu, 5 Dec 2019 20:17:59 +0100	[thread overview]
Message-ID: <20191205191758.GA30613@linux-8ccs> (raw)
In-Reply-To: <157535364480.17342.7937104819926015512.stgit@devnote2>

+++ Masami Hiramatsu [03/12/19 15:14 +0900]:
>While running kprobe module test, find_module_all() caused
>a suspicious RCU usage warning.
>
>-----
> =============================
> WARNING: suspicious RCU usage
> 5.4.0-next-20191202+ #63 Not tainted
> -----------------------------
> kernel/module.c:619 RCU-list traversed in non-reader section!!
>
> other info that might help us debug this:
>
>
> rcu_scheduler_active = 2, debug_locks = 1
> 1 lock held by rmmod/642:
>  #0: ffffffff8227da80 (module_mutex){+.+.}, at: __x64_sys_delete_module+0x9a/0x230
>
> stack backtrace:
> CPU: 0 PID: 642 Comm: rmmod Not tainted 5.4.0-next-20191202+ #63
> Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.1-0-ga5cab58e9a3f-prebuilt.qemu.org 04/01/2014
> Call Trace:
>  dump_stack+0x71/0xa0
>  find_module_all+0xc1/0xd0
>  __x64_sys_delete_module+0xac/0x230
>  ? do_syscall_64+0x12/0x1f0
>  do_syscall_64+0x50/0x1f0
>  entry_SYSCALL_64_after_hwframe+0x49/0xbe
> RIP: 0033:0x4b6d49
>-----
>
>This is because list_for_each_entry_rcu(modules) is called
>without rcu_read_lock(). This is safe because the module_mutex
>is locked.
>
>Pass lockdep_is_held(&module_lock) to the list_for_each_entry_rcu()

s/module_lock/module_mutex/, but you don't have to respin the patch
just for this.

>to suppress this warning, This also fixes similar issue in
>mod_find() and each_symbol_section().
>
>Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>

Thanks Masami! This looks good. I'll queue this up shortly after the
merge window.

Jessica

>---
> kernel/module.c |    9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
>diff --git a/kernel/module.c b/kernel/module.c
>index cb6250be6ee9..38e5c6a7451b 100644
>--- a/kernel/module.c
>+++ b/kernel/module.c
>@@ -214,7 +214,8 @@ static struct module *mod_find(unsigned long addr)
> {
> 	struct module *mod;
>
>-	list_for_each_entry_rcu(mod, &modules, list) {
>+	list_for_each_entry_rcu(mod, &modules, list,
>+				lockdep_is_held(&module_mutex)) {
> 		if (within_module(addr, mod))
> 			return mod;
> 	}
>@@ -448,7 +449,8 @@ bool each_symbol_section(bool (*fn)(const struct symsearch *arr,
> 	if (each_symbol_in_section(arr, ARRAY_SIZE(arr), NULL, fn, data))
> 		return true;
>
>-	list_for_each_entry_rcu(mod, &modules, list) {
>+	list_for_each_entry_rcu(mod, &modules, list,
>+				lockdep_is_held(&module_mutex)) {
> 		struct symsearch arr[] = {
> 			{ mod->syms, mod->syms + mod->num_syms, mod->crcs,
> 			  NOT_GPL_ONLY, false },
>@@ -616,7 +618,8 @@ static struct module *find_module_all(const char *name, size_t len,
>
> 	module_assert_mutex_or_preempt();
>
>-	list_for_each_entry_rcu(mod, &modules, list) {
>+	list_for_each_entry_rcu(mod, &modules, list,
>+				lockdep_is_held(&module_mutex)) {
> 		if (!even_unformed && mod->state == MODULE_STATE_UNFORMED)
> 			continue;
> 		if (strlen(mod->name) == len && !memcmp(mod->name, name, len))
>

  reply	other threads:[~2019-12-05 19:18 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-03  6:14 [PATCH] modules: lockdep: Suppress suspicious RCU usage warning Masami Hiramatsu
2019-12-05 19:17 ` Jessica Yu [this message]
2019-12-06  1:21   ` Masami Hiramatsu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191205191758.GA30613@linux-8ccs \
    --to=jeyu@kernel.org \
    --cc=anders.roxell@linaro.org \
    --cc=anil.s.keshavamurthy@intel.com \
    --cc=davem@davemloft.net \
    --cc=joel@joelfernandes.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=mingo@kernel.org \
    --cc=naveen.n.rao@linux.ibm.com \
    --cc=paulmck@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.