lkml.org 
[lkml]   [2012]   [Apr]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[ 30/42] modpost: Fix modpost license checking of vmlinux.o
    3.0-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Frank Rowand <frank.rowand@am.sony.com>

    commit 258f742635360175564e9470eb060ff4d4b984e7 upstream.

    Commit f02e8a6596b7 ("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 62a2635610db ("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 <frank.rowand@am.sony.com>
    Signed-off-by: Alessio Igor Bogani <abogani@kernel.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    scripts/mod/modpost.c | 7 +++++--
    scripts/mod/modpost.h | 1 +
    2 files changed, 6 insertions(+), 2 deletions(-)

    --- a/scripts/mod/modpost.c
    +++ b/scripts/mod/modpost.c
    @@ -132,8 +132,10 @@ static struct module *new_module(char *m
    /* 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;
    @@ -587,7 +589,8 @@ static void handle_modversions(struct mo
    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));
    --- a/scripts/mod/modpost.h
    +++ b/scripts/mod/modpost.h
    @@ -113,6 +113,7 @@ struct module {
    int has_cleanup;
    struct buffer dev_table_buf;
    char srcversion[25];
    + int is_dot_o;
    };

    struct elf_info {



    \
     
     \ /
      Last update: 2012-04-12 01:33    [W:0.023 / U:0.068 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site