All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alessio Igor Bogani <abogani@kernel.org>
To: Rusty Russell <rusty@rustcorp.com.au>
Cc: Jan Beulich <jbeulich@novell.com>,
	Kbuild <linux-kbuild@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Tim Bird <tim.bird@am.sony.com>,
	Anders Kaseorg <andersk@ksplice.com>,
	Arnaud Lacombe <lacombar@gmail.com>,
	Alessio Igor Bogani <abogani@kernel.org>
Subject: [PATCH] modpost: Fix modpost's license checking V2
Date: Tue, 12 Jul 2011 09:00:20 +0200	[thread overview]
Message-ID: <1310454020-15426-1-git-send-email-abogani@kernel.org> (raw)
In-Reply-To: <CACqU3MW=VUn64nsSA2V_eXEfEjv6xmB9yBWL8rYynH1wkHcOgw@mail.gmail.com>

The commit f02e8a6 sorts symbols placing each of them in its own elf section.
The sorting and merging into the canonical sections are done by the linker.
Unfortunately modpost to generate Module.symvers file parses vmlinux
(already linked) and all modules object files (which aren't linked yet).
These aren't sanitized by the linker yet. That breaks modpost that can't
detect license properly for modules. This patch makes modpost aware of
the new exported symbols structure. Thanks to Arnaud Lacombe
<lacombar@gmail.com> for providing useful suggestion about code.

This work was supported by a hardware donation from the CE Linux Forum.

Reported-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Alessio Igor Bogani <abogani@kernel.org>
---
 scripts/mod/modpost.c |   29 ++++++++++++++++++++++++++++-
 1 files changed, 28 insertions(+), 1 deletions(-)

diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 413c536..348db13 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -254,6 +254,28 @@ static enum export export_no(const char *s)
 	return export_unknown;
 }
 
+static const char *sec_name(struct elf_info *elf, int secindex);
+
+#define SEC_NAME_MATCH(name, str) (strncmp(name, str, strlen(str) - 1) == 0)
+
+static enum export export_from_secname(struct elf_info *elf, unsigned int sec)
+{
+	const char *secname = sec_name(elf, sec);
+
+	if (SEC_NAME_MATCH(secname, "___ksymtab+"))
+		return export_plain;
+	else if (SEC_NAME_MATCH(secname, "___ksymtab_unused+"))
+		return export_unused;
+	else if (SEC_NAME_MATCH(secname, "___ksymtab_gpl+"))
+		return export_gpl;
+	else if (SEC_NAME_MATCH(secname, "___ksymtab_unused_gpl+"))
+		return export_unused_gpl;
+	else if (SEC_NAME_MATCH(secname, "___ksymtab_gpl_future+"))
+		return export_gpl_future;
+	else
+		return export_unknown;
+}
+
 static enum export export_from_sec(struct elf_info *elf, unsigned int sec)
 {
 	if (sec == elf->export_sec)
@@ -563,7 +585,12 @@ static void handle_modversions(struct module *mod, struct elf_info *info,
 			       Elf_Sym *sym, const char *symname)
 {
 	unsigned int crc;
-	enum export export = export_from_sec(info, get_secindex(info, sym));
+	enum export export;
+
+	if (!is_vmlinux(mod->name) && strncmp(symname, "__ksymtab", 9) == 0)
+		export = export_from_secname(info, get_secindex(info, sym));
+	else
+		export = export_from_sec(info, get_secindex(info, sym));
 
 	switch (sym->st_shndx) {
 	case SHN_COMMON:
-- 
1.7.4.1


  reply	other threads:[~2011-07-12  8:00 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-04 15:00 sorting of exports breaks modpost's GPL checking Jan Beulich
2011-07-05  9:36 ` Alessio Igor Bogani
2011-07-05  9:47   ` Jan Beulich
2011-07-07  1:03     ` Rusty Russell
2011-07-07  8:09       ` Jan Beulich
2011-07-07 12:17         ` Alessio Igor Bogani
2011-07-09 23:13           ` [PATCH] modpost: Fix modpost's license checking Alessio Igor Bogani
2011-07-10  6:08             ` Arnaud Lacombe
2011-07-12  7:00               ` Alessio Igor Bogani [this message]
2011-07-12 18:02                 ` [PATCH] modpost: Fix modpost's license checking V2 Anders Kaseorg
2011-07-12 18:15                   ` Arnaud Lacombe
2011-07-12 18:35                     ` Anders Kaseorg
2011-07-12 18:49                       ` Arnaud Lacombe
2011-07-14  6:51                         ` [PATCH] modpost: Fix modpost's license checking V3 Alessio Igor Bogani
2011-07-18 23:38                           ` Rusty Russell
2011-07-18 23:38                             ` Rusty Russell
2011-07-20 15:25                           ` Michal Marek
2011-07-21  6:46                             ` Rusty Russell
2012-03-24  2:04                           ` Frank Rowand
2012-03-24  2:25                             ` Frank Rowand
2012-03-24  2:25                               ` Frank Rowand
2012-03-27  1:58                             ` Frank Rowand
2012-03-27  1:58                               ` Frank Rowand
2012-03-27  7:19                               ` Alessio Igor Bogani
2012-03-27 22:59                                 ` Frank Rowand
2012-03-28  8:04                                   ` Alessio Igor Bogani
2012-03-29  4:37                               ` Rusty Russell
2012-03-29  4:37                                 ` Rusty Russell
2012-04-10  0:59                                 ` Frank Rowand
2012-04-10  0:59                                   ` Frank Rowand

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=1310454020-15426-1-git-send-email-abogani@kernel.org \
    --to=abogani@kernel.org \
    --cc=andersk@ksplice.com \
    --cc=jbeulich@novell.com \
    --cc=lacombar@gmail.com \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rusty@rustcorp.com.au \
    --cc=tim.bird@am.sony.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.