--- 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,