On Tue, 2023-08-01 at 19:35 +0200, Christoph Hellwig wrote: > 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 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. I'm all for insisting that everything be exported with EXPORT_SYMBOL_GPL and nothing at all ever be exported with just EXPORT_SYMBOL. But if we're going to tolerate the core kernel still exporting some stuff with EXPORT_SYMBOL, why isn't OK for a GPL-licensed module do to the same? Even an *in-tree* GPL-licensed module now can't export functionality with EXPORT_SYMBOL and have it used with symbol_get(). We're forced to *either* allow direct linking by non-GPL modules, or allow symbol_get(), but not both? > Fixes: 262e6ae7081d ("modules: inherit TAINT_PROPRIETARY_MODULE") Hm, the condition we really need to fix *that* is "symbol_get() will only import symbols from GPL-licensed modules", isn't it? As long as that property is correctly transitive, why does the symbol itself have to be EXPORT_SYMBOL_GPL instead of EXPORT_SYMBOL? Am I missing another potential loophole? I suppose there's now scope for a different type of shim which *directly* imports an EXPORT_SYMBOL function in order to export it again as EXPORT_SYMBOL_GPL and thus allow the GPL export to be found with symbol_get()? That's the *converse* of the problematic shim that was being used before, and from a licensing point of view it seems fine... it's just working around the unintended side-effects of this patch?
<<attachment: smime.p7s>>