Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp3944427pxb; Mon, 1 Feb 2021 08:32:13 -0800 (PST) X-Google-Smtp-Source: ABdhPJxVl2+KQUCBt+wcXXKNPBdpdjKCcmz1zOqcVzzEecMV3pJRS43Okps+1yQgDUkb1AiquCAD X-Received: by 2002:a17:906:3685:: with SMTP id a5mr18182887ejc.544.1612197133005; Mon, 01 Feb 2021 08:32:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612197132; cv=none; d=google.com; s=arc-20160816; b=liWsoinpjh2ruyLe+G7NzNEakdpn0VJDZorpBF2lQFytvU/6K4vcfJq6vXMAUMv+YF +kvcr30PTxarnXM/Vs6VTSzWI5thr5yeEr3e2+n+kGp91uClaGqK8nCnvq2aCSejtdYI KAFVLUmQw4iMtFS0qQR0ZCYxUC9QgFkoz8co82ECusYdJX/7eQcKDq6BWTTYYZrmcoRK 1HkzM5ogf1IwBM6hYVbb2gn+kSku1DYeRB1vSRklrQOSSZfvNo3zHr7YROaVX8QIHhbx CiXuOqXX8mRtTYimaUEUlPW77EBM3oLcM2/WiUAssncv3GGC/wMRrNSchyKSfT8hPwuk jdlQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date; bh=VqiDqimLIr5xMFJ1BCm+FcxBAdq7dqAhGXsNIno3Z8Q=; b=nezwbavsVswFvXyLUhAF7ate2Cvd/aTzMBhnxw0PgnwlFj1cZSNpdhlzGWKX6R0NsG sDWiQpTPJ7Fx07sPXzhPvnQ1r90lT0rwPQx751pr9dlgEOYerdOeOvAhS6e+QN/xI6IU AgqimItg32mkEtaeKZjXDnr88K5BqoW09qWPhZL29GoWiCfgfTtuJO6CHFSF68dCVXMT MHktajipfWlPh6cxRqAvpZWNaXRw+4M96BwMM5T6aTruDRMinB/ORj+ulTTfMNChGFWM AyiTg/iE+ahORHI34DqvdEFpinCnJ+1Ll90tMXJyaVy5Ng39AkWKPmhI+qFbWY1m75OL AdQA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id eb13si13782985edb.8.2021.02.01.08.31.46; Mon, 01 Feb 2021 08:32:12 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230267AbhBAQ3m (ORCPT + 99 others); Mon, 1 Feb 2021 11:29:42 -0500 Received: from verein.lst.de ([213.95.11.211]:41924 "EHLO verein.lst.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229892AbhBAQ31 (ORCPT ); Mon, 1 Feb 2021 11:29:27 -0500 Received: by verein.lst.de (Postfix, from userid 2407) id A28F56736F; Mon, 1 Feb 2021 17:28:42 +0100 (CET) Date: Mon, 1 Feb 2021 17:28:42 +0100 From: Christoph Hellwig To: Miroslav Benes Cc: Christoph Hellwig , Petr Mladek , Frederic Barrat , Andrew Donnellan , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , Jessica Yu , Josh Poimboeuf , Jiri Kosina , Joe Lawrence , Masahiro Yamada , Michal Marek , linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, dri-devel@lists.freedesktop.org, live-patching@vger.kernel.org, linux-kbuild@vger.kernel.org Subject: Re: [PATCH 05/13] kallsyms: refactor {,module_}kallsyms_on_each_symbol Message-ID: <20210201162842.GB7276@lst.de> References: <20210128181421.2279-1-hch@lst.de> <20210128181421.2279-6-hch@lst.de> <20210201114749.GB19696@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-11-01) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Feb 01, 2021 at 02:37:12PM +0100, Miroslav Benes wrote: > > > This change is not needed. (objname == NULL) means that we are > > > interested only in symbols in "vmlinux". > > > > > > module_kallsyms_on_each_symbol(klp_find_callback, &args) > > > will always fail when objname == NULL. > > > > I just tried to keep the old behavior. I can respin it with your > > recommended change noting the change in behavior, though. > > Yes, please. It would be cleaner that way. Let me know if this works for you: --- From 18af41e88d088cfb8680d1669fcae2bc2ede5328 Mon Sep 17 00:00:00 2001 From: Christoph Hellwig Date: Wed, 20 Jan 2021 16:23:16 +0100 Subject: kallsyms: refactor {,module_}kallsyms_on_each_symbol Require an explicit call to module_kallsyms_on_each_symbol to look for symbols in modules instead of the call from kallsyms_on_each_symbol, and acquire module_mutex inside of module_kallsyms_on_each_symbol instead of leaving that up to the caller. Note that this slightly changes the behavior for the livepatch code in that the symbols from vmlinux are not iterated anymore if objname is set, but that actually is the desired behavior in this case. Signed-off-by: Christoph Hellwig --- kernel/kallsyms.c | 6 +++++- kernel/livepatch/core.c | 2 -- kernel/module.c | 13 ++++--------- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c index fe9de067771c34..a0d3f0865916f9 100644 --- a/kernel/kallsyms.c +++ b/kernel/kallsyms.c @@ -177,6 +177,10 @@ unsigned long kallsyms_lookup_name(const char *name) return module_kallsyms_lookup_name(name); } +/* + * Iterate over all symbols in vmlinux. For symbols from modules use + * module_kallsyms_on_each_symbol instead. + */ int kallsyms_on_each_symbol(int (*fn)(void *, const char *, struct module *, unsigned long), void *data) @@ -192,7 +196,7 @@ int kallsyms_on_each_symbol(int (*fn)(void *, const char *, struct module *, if (ret != 0) return ret; } - return module_kallsyms_on_each_symbol(fn, data); + return 0; } static unsigned long get_symbol_pos(unsigned long addr, diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c index 262cd9b003b9f0..335d988bd81117 100644 --- a/kernel/livepatch/core.c +++ b/kernel/livepatch/core.c @@ -164,12 +164,10 @@ static int klp_find_object_symbol(const char *objname, const char *name, .pos = sympos, }; - mutex_lock(&module_mutex); if (objname) module_kallsyms_on_each_symbol(klp_find_callback, &args); else kallsyms_on_each_symbol(klp_find_callback, &args); - mutex_unlock(&module_mutex); /* * Ensure an address was found. If sympos is 0, ensure symbol is unique; diff --git a/kernel/module.c b/kernel/module.c index 6772fb2680eb3e..25345792c770d1 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -255,11 +255,6 @@ static void mod_update_bounds(struct module *mod) struct list_head *kdb_modules = &modules; /* kdb needs the list of modules */ #endif /* CONFIG_KGDB_KDB */ -static void module_assert_mutex(void) -{ - lockdep_assert_held(&module_mutex); -} - static void module_assert_mutex_or_preempt(void) { #ifdef CONFIG_LOCKDEP @@ -4379,8 +4374,7 @@ int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *, unsigned int i; int ret; - module_assert_mutex(); - + mutex_lock(&module_mutex); list_for_each_entry(mod, &modules, list) { /* We hold module_mutex: no need for rcu_dereference_sched */ struct mod_kallsyms *kallsyms = mod->kallsyms; @@ -4396,10 +4390,11 @@ int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *, ret = fn(data, kallsyms_symbol_name(kallsyms, i), mod, kallsyms_symbol_value(sym)); if (ret != 0) - return ret; + break; } } - return 0; + mutex_unlock(&module_mutex); + return ret; } #endif /* CONFIG_KALLSYMS */ -- 2.29.2