Re: [PATCH 5/5] modules: only allow symbol_get of EXPORT_SYMBOL_GPL modules
From: Luis Chamberlain <mcgrof@kernel.org>
Date: 2023-07-31 20:38:49
Also in:
linux-arm-kernel, linux-mmc, linux-rtc, lkml, netdev
On Mon, Jul 31, 2023 at 10:38:06AM +0200, Christoph Hellwig wrote:
quoted hunk ↗ jump to hunk
--- 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.
quoted hunk ↗ jump to hunk
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.
quoted hunk ↗ jump to hunk
+ 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