--- busybox-0.60.5/insmod.c.orig 2002-09-16 09:30:10 +0400 +++ busybox-0.60.5/insmod.c 2003-11-09 23:21:53 +0300 @@ -1709,6 +1709,7 @@ add_symbols_from( struct new_module_symbol *s; size_t i; int used = 0; + int gpl = obj_gpl_license(f, NULL) == 0; for (i = 0, s = syms; i < nsyms; ++i, ++s) { @@ -1717,6 +1718,19 @@ add_symbols_from( We will also create a false dependency on the module. */ struct obj_symbol *sym; + /* GPL licensed modules can use symbols exported with + * EXPORT_SYMBOL_GPL, so ignore any GPLONLY_ prefix on the + * exported names. Non-GPL modules never see any GPLONLY_ + * symbols so they cannot fudge it by adding the prefix on + * their references. + */ + if (strncmp((char *)s->name, "GPLONLY_", 8) == 0) { + if (gpl) + ((char *)s->name) += 8; + else + continue; + } + sym = obj_find_symbol(f, (char *) s->name); if (sym && !ELFW(ST_BIND) (sym->info) == STB_LOCAL) { sym = obj_add_symbol(f, (char *) s->name, -1,