• Masahiro Yamada's avatar
    modpost: fix potential mmap'ed file overrun in get_src_version() · f531c1b5
    Masahiro Yamada authored
    I do not know how reliably this function works, but it looks dangerous
    to me.
    
        strchr(sources, '\n');
    
    ... continues searching until it finds '\n' or it reaches the '\0'
    terminator. In other words, 'sources' should be a null-terminated
    string.
    
    However, grab_file() just mmaps a file, so 'sources' is not terminated
    with null byte. If the file does not contain '\n' at all, strchr() will
    go beyond the mmap'ed memory.
    
    Use read_text_file(), which loads the file content into a malloc'ed
    buffer, appending null byte.
    
    Here we are interested only in the first line of *.mod files. Use
    get_line() helper to get the first line.
    
    This also makes missing *.mod file a fatal error.
    
    Commit 4be40e22 ("kbuild: do not emit src version warning for
    non-modules") ignored missing *.mod files.
    
    I do not fully understand what that commit addressed, but commit
    91341d4b ("kbuild: introduce new option to enhance section mismatch
    analysis") introduced partial section checks by using modpost. built-in.o
    was parsed by modpost. Even modules had a problem because *.mod files
    were created after the modpost check.
    
    Commit b7dca6dd ("kbuild: create *.mod with full directory path and
    remove MODVERDIR") stopped doing that. Now that modpost is only invoked
    after the directory descend, *.mod files should always exist at the
    modpost stage.
    Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    f531c1b5
sumversion.c 9.76 KB