[PATCH ??] Re: incorrect taint of ndiswrapper

Randy Dunlap
2006-10-26T17:25:40Z

On Wed, 25 Oct 2006 20:59:23 -0700 Andrew Morton wrote:

> > On Wed, 25 Oct 2006 21:30:26 +0100 Alan Cox <alan@lxorguk.ukuu.org.uk> wrote:
> > Ar Mer, 2006-10-25 am 16:11 -0400, ysgrifennodd Pavel Roskin:
> > > I don't see any legal reasons behind this restriction. A driver under
> > > GPL should be able to use any exported symbols. EXPORT_SYMBOL_GPL is a
> > > technical mechanism of enforcing GPL against non-free code, but
> > > ndiswrapper is free. The non-free NDIS drivers are not using those
> > > symbols.
> >
> > The combination of GPL wrapper and the NDIS driver as a work is not free
> > (in fact its questionable if its even legal to ship such a combination
> > together).
>
> May be so. But this patch was supposed to print a helpful taint message to
> draw our attention to the fact that ndis-wrapper was in use. The patch was
> not intended to cause gpl'ed modules to stop loading (or if is was, that
> effect was concealed from yours truly).
>
> IOW, this was a mistake.
>
>
> Now, if we do want to disallow gpl module loading after ndis-wrapper has
> been used then fine, we can discuss that. If we decide to proceed that way
> then we will probably cause a load of ndis-wrapper to emit a scary printk for
> six months or so to give people time to make arrangements.

Yes, if I understand what's happening, then this was an unintended
consequence.
Does the patch below allow ndiswrapper to operate?
Of course, this still leaves the kernel marked as tainted,
without an indication of which module caused that. Not the best
situation.

---
From: Randy Dunlap <randy.dunlap@oracle.com>

For ndiswrapper and driverloader, don't set the module->taints
flags, just set the kernel global tainted flag.
This should allow ndiswrapper to continue to use GPL symbols.
Not tested.

Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
---
kernel/module.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

--- linux-2619-rc3-pv.orig/kernel/module.c
+++ linux-2619-rc3-pv/kernel/module.c
@@ -1718,9 +1718,9 @@ static struct module *load_module(void _
set_license(mod, get_modinfo(sechdrs, infoindex, "license"));

if (strcmp(mod->name, "ndiswrapper") == 0)
- add_taint_module(mod, TAINT_PROPRIETARY_MODULE);
+ add_taint(TAINT_PROPRIETARY_MODULE);
if (strcmp(mod->name, "driverloader") == 0)
- add_taint_module(mod, TAINT_PROPRIETARY_MODULE);
+ add_taint(TAINT_PROPRIETARY_MODULE);

/* Set up MODINFO_ATTR fields */
setup_modinfo(mod, sechdrs, infoindex);