[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <ZMgbyNKnotCMyB+f@bombadil.infradead.org>
Date: Mon, 31 Jul 2023 13:38:32 -0700
From: Luis Chamberlain <mcgrof@...nel.org>
To: Christoph Hellwig <hch@....de>
Cc: Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Daniel Mack <daniel@...que.org>,
Haojian Zhuang <haojian.zhuang@...il.com>,
Robert Jarzmik <robert.jarzmik@...e.fr>,
Ulf Hansson <ulf.hansson@...aro.org>, Yangbo Lu <yangbo.lu@....com>,
Joshua Kinard <kumba@...too.org>,
Daniel Vetter <daniel.vetter@...ll.ch>,
linux-arm-kernel@...ts.infradead.org,
open list <linux-kernel@...r.kernel.org>, linux-mmc@...r.kernel.org,
netdev@...r.kernel.org, linux-rtc@...r.kernel.org,
linux-modules@...r.kernel.org
Subject: Re: [PATCH 5/5] modules: only allow symbol_get of EXPORT_SYMBOL_GPL
modules
On Mon, Jul 31, 2023 at 10:38:06AM +0200, Christoph Hellwig wrote:
> ---
> kernel/module/internal.h | 1 +
> kernel/module/main.c | 17 ++++++++++++-----
> 2 files changed, 13 insertions(+), 5 deletions(-)
>
> diff --git a/kernel/module/internal.h b/kernel/module/internal.h
> index c8b7b4dcf7820d..add687c2abde8b 100644
> --- a/kernel/module/internal.h
> +++ b/kernel/module/internal.h
> @@ -93,6 +93,7 @@ struct find_symbol_arg {
> /* Input */
> const char *name;
> bool gplok;
> + bool gplonly;
We'd want to add here a reason or something like that to allow the
caller to know why we failed if we want to provide feedback.
> bool warn;
>
> /* Output */
> diff --git a/kernel/module/main.c b/kernel/module/main.c
> index 59b1d067e52890..85d3f00ca65758 100644
> --- a/kernel/module/main.c
> +++ b/kernel/module/main.c
> @@ -281,6 +281,8 @@ static bool find_exported_symbol_in_section(const struct symsearch *syms,
>
> if (!fsa->gplok && syms->license == GPL_ONLY)
> return false;
> + if (fsa->gplonly && syms->license != GPL_ONLY)
And set it here to something other than perhaps a default of NOT_FOUND.
> + return false;
>
> sym = bsearch(fsa->name, syms->start, syms->stop - syms->start,
> sizeof(struct kernel_symbol), cmp_name);
> @@ -776,8 +778,9 @@ SYSCALL_DEFINE2(delete_module, const char __user *, name_user,
> @@ -1289,14 +1292,18 @@ static void free_module(struct module *mod)
> void *__symbol_get(const char *symbol)
> {
> struct find_symbol_arg fsa = {
> - .name = symbol,
> - .gplok = true,
> - .warn = true,
> + .name = symbol,
> + .gplok = true,
> + .gplonly = true,
> + .warn = true,
> };
>
> preempt_disable();
> if (!find_symbol(&fsa) || strong_try_module_get(fsa.owner)) {
> preempt_enable();
> + if (fsa.gplonly)
> + pr_warn("failing symbol_get of non-GPLONLY symbol %s.\n",
Because here fsa.gplonly is always true here so the above warn will
print even if a symbol is just not found.
Luis
Powered by blists - more mailing lists