mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Andi Kleen <ak@suse.de>
To: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	sam@ravnborg.org, rusty@rustcorp.com.au
Subject: [PATCH RFC] [2/9] Fix duplicate symbol check to also check future gpl and unused symbols
Date: Thu, 22 Nov 2007 03:43:07 +0100 (CET)	[thread overview]
Message-ID: <20071122024307.8C4A314D68@wotan.suse.de> (raw)
In-Reply-To: <20071122343.446909000@suse.de>


This seems to have been forgotten earlier. Right now it was possible
for a normal symbol to override a future gpl symbol and similar.
I restructured the code a bit to avoid too much duplicated code.

---
 kernel/module.c |   45 ++++++++++++++++++++++++---------------------
 1 file changed, 24 insertions(+), 21 deletions(-)

Index: linux/kernel/module.c
===================================================================
--- linux.orig/kernel/module.c
+++ linux/kernel/module.c
@@ -1430,33 +1430,36 @@ EXPORT_SYMBOL_GPL(do_symbol_get);
  * Ensure that an exported symbol [global namespace] does not already exist
  * in the kernel or in some other module's exported symbol table.
  */
-static int verify_export_symbols(struct module *mod)
+
+static int check_duplicate(const struct kernel_symbol *syms, int num, struct module *owner)
 {
-	const char *name = NULL;
-	unsigned long i, ret = 0;
-	struct module *owner;
+	int i;
 	const unsigned long *crc;
 
-	for (i = 0; i < mod->num_syms; i++)
-	        if (find_symbol(mod->syms[i].name, &owner, &crc, 1, mod)) {
-			name = mod->syms[i].name;
-			ret = -ENOEXEC;
-			goto dup;
-		}
-
-	for (i = 0; i < mod->num_gpl_syms; i++)
-	        if (find_symbol(mod->gpl_syms[i].name, &owner, &crc, 1, mod)) {
-			name = mod->gpl_syms[i].name;
-			ret = -ENOEXEC;
-			goto dup;
+	for (i = 0; i < num; i++)
+	        if (find_symbol(syms[i].name, &owner, &crc, 1, owner)) {
+			printk(KERN_ERR "%s: exports duplicate symbol %s (owned by %s)\n",
+				owner->name, syms[i].name, module_name(owner));
+			return -ENOEXEC;
 		}
+	return 0;
+}
 
-dup:
+static int verify_export_symbols(struct module *mod)
+{
+	int ret = check_duplicate(mod->syms, mod->num_syms, mod);
 	if (ret)
-		printk(KERN_ERR "%s: exports duplicate symbol %s (owned by %s)\n",
-			mod->name, name, module_name(owner));
-
-	return ret;
+		return ret;
+	ret = check_duplicate(mod->gpl_syms, mod->num_gpl_syms, mod);
+	if (ret)
+		return ret;
+	ret = check_duplicate(mod->unused_syms, mod->num_unused_syms, mod);
+	if (ret)
+		return ret;
+	ret = check_duplicate(mod->unused_gpl_syms, mod->num_unused_gpl_syms, mod);
+	if (ret)
+		return ret;
+	return check_duplicate(mod->gpl_future_syms, mod->num_gpl_future_syms, mod);
 }
 
 /* Change all symbols so that sh_value encodes the pointer directly. */

  reply	other threads:[~2007-11-22  2:43 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-22  2:43 [PATCH RFC] [1/9] Core module symbol namespaces code and intro Andi Kleen
2007-11-22  2:43 ` Andi Kleen [this message]
2007-11-22  2:43 ` [PATCH RFC] [3/9] modpost: Declare the modpost error functions as printf like Andi Kleen
2007-12-10 18:50   ` Sam Ravnborg
2007-12-10 18:58     ` Andi Kleen
2007-12-12  1:37     ` Rusty Russell
2007-11-22  2:43 ` [PATCH RFC] [4/9] modpost: Fix format string warnings Andi Kleen
2007-12-10 18:50   ` Sam Ravnborg
2007-11-22  2:43 ` [PATCH RFC] [5/9] modpost: Fix a buffer overflow in modpost Andi Kleen
2007-12-10 19:32   ` Sam Ravnborg
2007-12-10 19:57     ` Andi Kleen
2007-12-10 20:07       ` Sam Ravnborg
2007-11-22  2:43 ` [PATCH RFC] [6/9] Implement namespace checking " Andi Kleen
2007-11-22  2:43 ` [PATCH RFC] [7/9] Convert TCP exports into namespaces Andi Kleen
2007-11-22  2:43 ` [PATCH RFC] [8/9] Put UDP exports into a namespace Andi Kleen
2007-11-22  2:43 ` [PATCH RFC] [9/9] Add a inet namespace Andi Kleen
2007-11-22  3:03 ` [PATCH RFC] [1/9] Core module symbol namespaces code and intro Arjan van de Ven
2007-11-22  3:37   ` Andi Kleen
2007-11-22  3:52 ` Dave Jones
2007-11-22  3:56 ` Rusty Russell
2007-11-22  8:41   ` Dave Young
2007-11-22 18:19     ` Andi Kleen
2007-11-23  2:06       ` Dave Young
2007-11-22 11:05   ` Christoph Hellwig
2007-11-23  0:25     ` Rusty Russell
2007-11-23  1:36       ` Andi Kleen
2007-11-23  3:35         ` Rusty Russell
2007-11-23 19:53           ` Andi Kleen
2007-11-24  4:53             ` Rusty Russell
2007-11-24 12:39               ` Andi Kleen
2007-11-26  1:23                 ` Rusty Russell
2007-11-22 11:46   ` Andi Kleen
2007-11-23  0:29     ` Rusty Russell
2007-11-25 20:29       ` Roland Dreier
2007-11-26  1:25         ` Rusty Russell
2007-11-26  5:58           ` Roland Dreier
2007-11-27  4:26             ` Rusty Russell
2007-11-27 10:50               ` Andi Kleen
2007-11-27 13:58                 ` Herbert Xu
2007-11-27 14:12                   ` Andi Kleen
2007-11-27 14:36                     ` Herbert Xu
2007-11-27 20:02                     ` Valdis.Kletnieks
2007-11-28  1:34                 ` Rusty Russell
2007-11-22 11:06 ` Christoph Hellwig
2007-11-22 11:54   ` Andi Kleen
2007-11-22 12:03     ` Christoph Hellwig
2007-11-22 12:01 ` Arnaldo Carvalho de Melo
2007-11-22 18:17   ` Andi Kleen
2007-11-25 20:27 ` Roland Dreier
2007-11-26  1:28   ` Rusty Russell
2007-11-26  6:15     ` Roland Dreier
2007-11-27  4:49       ` Rusty Russell
2007-11-27  5:35         ` Tom Tucker
2007-11-27  9:02           ` Andi Kleen
2007-11-27 17:24             ` Adrian Bunk
2007-11-27 17:15           ` Adrian Bunk
2007-11-27 17:45             ` Tom Tucker
2007-11-27 18:59               ` Adrian Bunk
2007-11-28  1:27           ` Rusty Russell
2007-11-28  4:12             ` Tom Tucker
2007-11-27 15:43         ` Jonathan Corbet
2007-11-27 15:58           ` Andi Kleen
2007-11-27 16:33           ` Christoph Hellwig
2007-11-27 22:31         ` Jon Masters
2007-11-27 22:37           ` Andi Kleen
2007-11-27 23:00             ` Stephen Hemminger
2007-11-27 23:06               ` Andi Kleen
2007-11-28 16:48                 ` Adrian Bunk
2007-11-28 17:31                   ` Andi Kleen
2007-11-26 18:25     ` Stephen Hemminger
2007-11-26 22:18       ` Roland Dreier
2007-11-27 19:00       ` Dave Jones
2007-11-27 21:09         ` Adrian Bunk
2007-11-27 21:15           ` Rick Jones
2007-11-27 21:38             ` Adrian Bunk
2007-11-28  2:01               ` Rick Jones
2007-11-27 21:25           ` Dave Jones
2007-11-27 23:00           ` Valdis.Kletnieks
2007-11-29 16:53       ` Arjan van de Ven
2007-11-30  2:18         ` Rusty Russell
2007-11-29  9:55 ` Arnd Bergmann
2007-11-29 10:00   ` Andi Kleen
2007-11-29 10:21     ` Arnd Bergmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20071122024307.8C4A314D68@wotan.suse.de \
    --to=ak@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=rusty@rustcorp.com.au \
    --cc=sam@ravnborg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®