Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp1638853ybv; Fri, 21 Feb 2020 00:47:51 -0800 (PST) X-Google-Smtp-Source: APXvYqz0/pRNDoaHy4Nfu8L+SNsTAZHNN+f8vLVPmiCbT/l8MaVQGt8C6y13jvXeEdKC0LZYj2YD X-Received: by 2002:a05:6830:140b:: with SMTP id v11mr27214897otp.340.1582274871249; Fri, 21 Feb 2020 00:47:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582274871; cv=none; d=google.com; s=arc-20160816; b=jCTqpX/jaOMoPTnnGNiOuTyX92aiqix7jsp7NhPDHUnYTxTCp2375S6l8Fl4LYPpOH zdRL9iTOA6HeumY2T9/pEz9kjgvN8F/tWzKpujlvMjchGc8SGJJQpr8hqphgORKMFkd3 UuCghGzoeEBAA5OZx/FmxZZZAOt4l6Ag54wVmYNirc5U2dZnla/f7use6hkkMtBrpqDh xDIuL2cvEzTn5ByEu+tLdOvigYVmfk471RK1QLd0x7iTUU/N+5TPn+iJ3RJJRSqQrLGT 0pYeo5ANCjfgEQ52yvyScEAsK5IqWJvieTXRHxi8BB8qhYCm5Dn2BUSLfO2sTntpLEtG WRYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=L1tf4YLtrnz82XI1ceJb7b7Ahbp/ZY8Ip300i+8VXgk=; b=X8J3jcqYZJyjo4CCPJK9B1mAGF66ngxX+h8mz25Ir4Br3VpCiBI7OHaV+dhIIrbA+z pyUZXp846MN1U+Pu5tfb/lfQHIlVAjpDLsD8HDMR5aK4+vRX56323wiQpcOq4rPCJ3zo MCglbi9HdXQ+zyGsArO1kyYgGxvhIsXxAHKt83hnsQy1p3tRhCr5zcAJB4YZX/xJ/47w 5gFS8wRZPOKal541jH3aOgUM3lq/TlzkS73wMqEkOiw1j57JZAtSelLbBaX5z5vaRkqS BYSK4JrHvRzE4qg41dcm1kUO+6zbDisb11zKKGSF2EieoKR+PIlJTxkjSwsIj64syDek Q0XQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=DHpo0ZSR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y8si1064997otg.309.2020.02.21.00.47.38; Fri, 21 Feb 2020 00:47:51 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=DHpo0ZSR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732345AbgBUIqL (ORCPT + 99 others); Fri, 21 Feb 2020 03:46:11 -0500 Received: from mail.kernel.org ([198.145.29.99]:47224 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729545AbgBUHuV (ORCPT ); Fri, 21 Feb 2020 02:50:21 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 1E1DC24656; Fri, 21 Feb 2020 07:50:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1582271420; bh=deNAJfb+HengsUnbWaZWDBpg7gTmWXmNHJ17KELUfr4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DHpo0ZSRCUwDw2IqzpRQT1IcskFT5oyg5a2avqZiVoQotbbcKoASZUGFbttYw8GlA uPDVYIKdLftzwdbyOY3B1NdROFPDEkZAfMoVvx3TH6kZ2cbQR73IaLnXw/5PXyLygb g6PElscMdCCYGr6N01iS8Ou8iFUBjmJKAwfFwhic= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Masami Hiramatsu , Jessica Yu , Sasha Levin Subject: [PATCH 5.5 111/399] modules: lockdep: Suppress suspicious RCU usage warning Date: Fri, 21 Feb 2020 08:37:16 +0100 Message-Id: <20200221072413.235275688@linuxfoundation.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200221072402.315346745@linuxfoundation.org> References: <20200221072402.315346745@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Masami Hiramatsu [ Upstream commit bf08949cc8b98b7d1e20cfbba169a5938d42dae8 ] 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_mutex) to the list_for_each_entry_rcu() to suppress this warning, This also fixes similar issue in mod_find() and each_symbol_section(). Signed-off-by: Masami Hiramatsu Signed-off-by: Jessica Yu Signed-off-by: Sasha Levin --- kernel/module.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/kernel/module.c b/kernel/module.c index 8785e31c2dd0f..d83edc3a41a33 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)) -- 2.20.1