mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
modules: only allow symbol_get of EXPORT_SYMBOL_GPL modules
It has recently come to my attention that nvidia is circumventing the protection added in262e6ae708
("modules: inherit TAINT_PROPRIETARY_MODULE") by importing exports from their proprietary modules into an allegedly GPL licensed module and then rexporting them. Given that symbol_get was only ever intended for tightly cooperating modules using very internal symbols it is logical to restrict it to being used on EXPORT_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:262e6ae708
("modules: inherit TAINT_PROPRIETARY_MODULE") Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
This commit is contained in:
parent
95e7ebc682
commit
9011e49d54
@ -1295,12 +1295,20 @@ void *__symbol_get(const char *symbol)
|
||||
};
|
||||
|
||||
preempt_disable();
|
||||
if (!find_symbol(&fsa) || strong_try_module_get(fsa.owner)) {
|
||||
preempt_enable();
|
||||
return NULL;
|
||||
if (!find_symbol(&fsa))
|
||||
goto fail;
|
||||
if (fsa.license != GPL_ONLY) {
|
||||
pr_warn("failing symbol_get of non-GPLONLY symbol %s.\n",
|
||||
symbol);
|
||||
goto fail;
|
||||
}
|
||||
if (strong_try_module_get(fsa.owner))
|
||||
goto fail;
|
||||
preempt_enable();
|
||||
return (void *)kernel_symbol_value(fsa.sym);
|
||||
fail:
|
||||
preempt_enable();
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__symbol_get);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user