lkml.org 
[lkml]   [2019]   [Apr]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 070/134] kbuild: modversions: Fix relative CRC byte order interpretation
    Date
    4.19-stable review patch.  If anyone has any objections, please let me know.

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

    From: Fredrik Noring <noring@nocrew.org>

    commit 54a7151b1496cddbb7a83546b7998103e98edc88 upstream.

    Fix commit 56067812d5b0 ("kbuild: modversions: add infrastructure for
    emitting relative CRCs") where CRCs are interpreted in host byte order
    rather than proper kernel byte order. The bug is conditional on
    CONFIG_MODULE_REL_CRCS.

    For example, when loading a BE module into a BE kernel compiled with a LE
    system, the error "disagrees about version of symbol module_layout" is
    produced. A message such as "Found checksum D7FA6856 vs module 5668FAD7"
    will be given with debug enabled, which indicates an obvious endian
    problem within __kcrctab within the kernel image.

    The general solution is to use the macro TO_NATIVE, as is done in
    similar cases throughout modpost.c. With this correction it has been
    verified that a BE kernel compiled with a LE system accepts BE modules.

    This change has also been verified with a LE kernel compiled with a LE
    system, in which case TO_NATIVE returns its value unmodified since the
    byte orders match. This is by far the common case.

    Fixes: 56067812d5b0 ("kbuild: modversions: add infrastructure for emitting relative CRCs")
    Signed-off-by: Fredrik Noring <noring@nocrew.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    scripts/mod/modpost.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/scripts/mod/modpost.c
    +++ b/scripts/mod/modpost.c
    @@ -640,7 +640,7 @@ static void handle_modversions(struct mo
    info->sechdrs[sym->st_shndx].sh_offset -
    (info->hdr->e_type != ET_REL ?
    info->sechdrs[sym->st_shndx].sh_addr : 0);
    - crc = *crcp;
    + crc = TO_NATIVE(*crcp);
    }
    sym_update_crc(symname + strlen("__crc_"), mod, crc,
    export);

    \
     
     \ /
      Last update: 2019-04-01 19:19    [W:4.076 / U:0.168 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site