From: Christoph Hellwig <hch@lst.de> To: Luis Chamberlain <mcgrof@kernel.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Daniel Mack <daniel@zonque.org>, Haojian Zhuang <haojian.zhuang@gmail.com>, Robert Jarzmik <robert.jarzmik@free.fr>, Ulf Hansson <ulf.hansson@linaro.org>, Yangbo Lu <yangbo.lu@nxp.com>, Joshua Kinard <kumba@gentoo.org> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org (open list), linux-mmc@vger.kernel.org, netdev@vger.kernel.org, linux-rtc@vger.kernel.org, linux-modules@vger.kernel.org Subject: [PATCH 5/5] modules: only allow symbol_get of EXPORT_SYMBOL_GPL modules Date: Mon, 31 Jul 2023 10:38:06 +0200 [thread overview] Message-ID: <20230731083806.453036-6-hch@lst.de> (raw) In-Reply-To: <20230731083806.453036-1-hch@lst.de> It has recently come to my attention that nvidia is circumventing the protection added in 262e6ae7081d ("modules: inherit TAINT_PROPRIETARY_MODULE") by importing exports from their propriertary modules into an allegedly GPL licensed module and then rexporting them. Given that symbol_get was only ever inteded for tightly cooperating modules using very internal symbols it is logical to restrict it to being used on EXPORY_SYMBOL_GPL and prevent nvidia from costly DMCA circumvention of access controls law suites. All symbols except for four used through symbol_get were already exported as EXPORT_SYMBOL_GPL, and the remaining four ones were switched over in the preparation patches. Fixes: 262e6ae7081d ("modules: inherit TAINT_PROPRIETARY_MODULE") Signed-off-by: Christoph Hellwig <hch@lst.de> --- 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; 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) + 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, void __symbol_put(const char *symbol) { struct find_symbol_arg fsa = { - .name = symbol, - .gplok = true, + .name = symbol, + .gplok = true, + .gplonly = true, }; preempt_disable(); @@ -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", + symbol); return NULL; } preempt_enable(); -- 2.39.2
WARNING: multiple messages have this Message-ID (diff)
From: Christoph Hellwig <hch@lst.de> To: Luis Chamberlain <mcgrof@kernel.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Daniel Mack <daniel@zonque.org>, Haojian Zhuang <haojian.zhuang@gmail.com>, Robert Jarzmik <robert.jarzmik@free.fr>, Ulf Hansson <ulf.hansson@linaro.org>, Yangbo Lu <yangbo.lu@nxp.com>, Joshua Kinard <kumba@gentoo.org> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org (open list), linux-mmc@vger.kernel.org, netdev@vger.kernel.org, linux-rtc@vger.kernel.org, linux-modules@vger.kernel.org Subject: [PATCH 5/5] modules: only allow symbol_get of EXPORT_SYMBOL_GPL modules Date: Mon, 31 Jul 2023 10:38:06 +0200 [thread overview] Message-ID: <20230731083806.453036-6-hch@lst.de> (raw) In-Reply-To: <20230731083806.453036-1-hch@lst.de> It has recently come to my attention that nvidia is circumventing the protection added in 262e6ae7081d ("modules: inherit TAINT_PROPRIETARY_MODULE") by importing exports from their propriertary modules into an allegedly GPL licensed module and then rexporting them. Given that symbol_get was only ever inteded for tightly cooperating modules using very internal symbols it is logical to restrict it to being used on EXPORY_SYMBOL_GPL and prevent nvidia from costly DMCA circumvention of access controls law suites. All symbols except for four used through symbol_get were already exported as EXPORT_SYMBOL_GPL, and the remaining four ones were switched over in the preparation patches. Fixes: 262e6ae7081d ("modules: inherit TAINT_PROPRIETARY_MODULE") Signed-off-by: Christoph Hellwig <hch@lst.de> --- 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; 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) + 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, void __symbol_put(const char *symbol) { struct find_symbol_arg fsa = { - .name = symbol, - .gplok = true, + .name = symbol, + .gplok = true, + .gplonly = true, }; preempt_disable(); @@ -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", + symbol); return NULL; } preempt_enable(); -- 2.39.2 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-07-31 8:40 UTC|newest] Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-07-31 8:38 require EXPORT_SYMBOL_GPL symbols for symbol_get Christoph Hellwig 2023-07-31 8:38 ` Christoph Hellwig 2023-07-31 8:38 ` [PATCH 1/5] ARM/pxa: use EXPORT_SYMBOL_GPL for sharpsl_battery_kick Christoph Hellwig 2023-07-31 8:38 ` Christoph Hellwig 2023-07-31 16:12 ` Arnd Bergmann 2023-07-31 16:12 ` Arnd Bergmann 2023-07-31 16:26 ` Christoph Hellwig 2023-07-31 16:26 ` Christoph Hellwig 2023-07-31 8:38 ` [PATCH 2/5] net: enetc: use EXPORT_SYMBOL_GPL for enetc_phc_index Christoph Hellwig 2023-07-31 8:38 ` Christoph Hellwig 2023-07-31 18:19 ` Jakub Kicinski 2023-07-31 18:19 ` Jakub Kicinski 2023-07-31 8:38 ` [PATCH 3/5] rtc: ds1685: use EXPORT_SYMBOL_GPL for ds1685_rtc_poweroff Christoph Hellwig 2023-07-31 8:38 ` Christoph Hellwig 2023-07-31 15:08 ` Joshua Kinard 2023-07-31 15:08 ` Joshua Kinard 2023-07-31 8:38 ` [PATCH 4/5] mmc: use EXPORT_SYMBOL_GPL for mmc_detect_change Christoph Hellwig 2023-07-31 8:38 ` Christoph Hellwig 2023-07-31 16:57 ` Christoph Hellwig 2023-07-31 16:57 ` Christoph Hellwig 2023-07-31 8:38 ` Christoph Hellwig [this message] 2023-07-31 8:38 ` [PATCH 5/5] modules: only allow symbol_get of EXPORT_SYMBOL_GPL modules Christoph Hellwig 2023-07-31 11:05 ` Greg Kroah-Hartman 2023-07-31 11:05 ` Greg Kroah-Hartman 2023-07-31 18:11 ` Simon Horman 2023-07-31 18:11 ` Simon Horman 2023-07-31 20:38 ` Luis Chamberlain 2023-07-31 20:38 ` Luis Chamberlain 2023-07-31 11:05 ` require EXPORT_SYMBOL_GPL symbols for symbol_get Greg Kroah-Hartman 2023-07-31 11:05 ` Greg Kroah-Hartman 2023-08-01 17:35 require EXPORT_SYMBOL_GPL symbols for symbol_get v2 Christoph Hellwig 2023-08-01 17:35 ` [PATCH 5/5] modules: only allow symbol_get of EXPORT_SYMBOL_GPL modules Christoph Hellwig 2023-08-01 17:35 ` Christoph Hellwig 2023-10-18 0:30 ` David Woodhouse 2023-10-18 0:30 ` David Woodhouse 2023-10-18 5:31 ` Christoph Hellwig 2023-10-18 5:31 ` Christoph Hellwig 2023-10-18 18:25 ` Luis Chamberlain 2023-10-18 18:25 ` Luis Chamberlain
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=20230731083806.453036-6-hch@lst.de \ --to=hch@lst.de \ --cc=daniel.vetter@ffwll.ch \ --cc=daniel@zonque.org \ --cc=gregkh@linuxfoundation.org \ --cc=haojian.zhuang@gmail.com \ --cc=kumba@gentoo.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mmc@vger.kernel.org \ --cc=linux-modules@vger.kernel.org \ --cc=linux-rtc@vger.kernel.org \ --cc=mcgrof@kernel.org \ --cc=netdev@vger.kernel.org \ --cc=robert.jarzmik@free.fr \ --cc=ulf.hansson@linaro.org \ --cc=yangbo.lu@nxp.com \ /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: linkBe 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.