Skip to content

Commit

Permalink
modpost: Fix modpost license checking of vmlinux.o
Browse files Browse the repository at this point in the history
Commit f02e8a6 ("module: Sort exported symbols") sorts symbols
placing each of them in its own elf section.  This sorting and merging
into the canonical sections are done by the linker.

Unfortunately modpost to generate Module.symvers file parses vmlinux.o
(which is not linked yet) 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.

[ This above is a slightly corrected version of the explanation of the
  problem, copied from commit 62a2635 ("modpost: Fix modpost's
  license checking V3").  That commit fixed the problem for module
  object files, but not for vmlinux.o.  This patch fixes modpost for
  vmlinux.o. ]

Signed-off-by: Frank Rowand <[email protected]>
Signed-off-by: Alessio Igor Bogani <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Frank Rowand authored and torvalds committed Apr 10, 2012
1 parent 83dbbdb commit 258f742
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 2 deletions.
7 changes: 5 additions & 2 deletions scripts/mod/modpost.c
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,10 @@ static struct module *new_module(char *modname)
/* strip trailing .o */
s = strrchr(p, '.');
if (s != NULL)
if (strcmp(s, ".o") == 0)
if (strcmp(s, ".o") == 0) {
*s = '\0';
mod->is_dot_o = 1;
}

/* add to list */
mod->name = p;
Expand Down Expand Up @@ -587,7 +589,8 @@ static void handle_modversions(struct module *mod, struct elf_info *info,
unsigned int crc;
enum export export;

if (!is_vmlinux(mod->name) && strncmp(symname, "__ksymtab", 9) == 0)
if ((!is_vmlinux(mod->name) || mod->is_dot_o) &&
strncmp(symname, "__ksymtab", 9) == 0)
export = export_from_secname(info, get_secindex(info, sym));
else
export = export_from_sec(info, get_secindex(info, sym));
Expand Down
1 change: 1 addition & 0 deletions scripts/mod/modpost.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ struct module {
int has_cleanup;
struct buffer dev_table_buf;
char srcversion[25];
int is_dot_o;
};

struct elf_info {
Expand Down

0 comments on commit 258f742

Please sign in to comment.