• Mike Frysinger's avatar
    modpost: fix segfault in sym_is() with prefixed arches · 3a5dd791
    Mike Frysinger authored
    The sym_is() compares a symbol in an attempt to automatically skip symbol
    prefixes.  It does this first by searching the real symbol with the normal
    unprefixed symbol.  But then it uses the length of the original symbol to
    check the end of the substring instead of the length of the symbol it is
    looking for.  On non-prefixed arches, this is effectively the same thing,
    so there is no problem.  On prefixed-arches, since this is exceeds by just
    one byte, a crash is rare and it is usually a NUL byte anyways.  But every
    once in a blue moon, you get the right page alignment and it segfaults.
    
    For example, on the Blackfin arch, sym_is() will be called with the real
    symbol "___mod_usb_device_table" as "symbol" when looking for the normal
    symbol "__mod_usb_device_table" as "name".  The substring will thus return
    one byte into "symbol" and store it into "match".  But then "match" will
    be indexed with the length of "symbol" instead of "name" and so we will
    exceed the storage.  i.e. the code ends up doing:
    	char foo[] = "abc"; return foo[strlen(foo)+1] == '\0';
    Signed-off-by: 's avatarMike Frysinger <vapier@gentoo.org>
    Signed-off-by: 's avatarRusty Russell <rusty@rustcorp.com.au>
    Signed-off-by: 's avatarLinus Torvalds <torvalds@linux-foundation.org>
    3a5dd791
Name
Last commit
Last update
..
basic Loading commit data...
dtc Loading commit data...
genksyms Loading commit data...
kconfig Loading commit data...
ksymoops Loading commit data...
mod Loading commit data...
package Loading commit data...
rt-tester Loading commit data...
selinux Loading commit data...
tracing Loading commit data...
.gitignore Loading commit data...
Kbuild.include Loading commit data...
Lindent Loading commit data...
Makefile Loading commit data...
Makefile.build Loading commit data...
Makefile.clean Loading commit data...
Makefile.fwinst Loading commit data...
Makefile.headersinst Loading commit data...
Makefile.host Loading commit data...
Makefile.lib Loading commit data...
Makefile.modbuiltin Loading commit data...
Makefile.modinst Loading commit data...
Makefile.modpost Loading commit data...
bin2c.c Loading commit data...
binoffset.c Loading commit data...
bloat-o-meter Loading commit data...
bootgraph.pl Loading commit data...
checkincludes.pl Loading commit data...
checkkconfigsymbols.sh Loading commit data...
checkpatch.pl Loading commit data...
checkstack.pl Loading commit data...
checksyscalls.sh Loading commit data...
checkversion.pl Loading commit data...
cleanfile Loading commit data...
cleanpatch Loading commit data...
config Loading commit data...
conmakehash.c Loading commit data...
decodecode Loading commit data...
diffconfig Loading commit data...
export_report.pl Loading commit data...
extract-ikconfig Loading commit data...
gcc-version.sh Loading commit data...
gcc-x86_32-has-stack-protector.sh Loading commit data...
gcc-x86_64-has-stack-protector.sh Loading commit data...
gen_initramfs_list.sh Loading commit data...
get_maintainer.pl Loading commit data...
gfp-translate Loading commit data...
headerdep.pl Loading commit data...
headers.sh Loading commit data...
headers_check.pl Loading commit data...
headers_install.pl Loading commit data...
kallsyms.c Loading commit data...
kernel-doc Loading commit data...
makelst Loading commit data...
markup_oops.pl Loading commit data...
mkcompile_h Loading commit data...
mkmakefile Loading commit data...
mksysmap Loading commit data...
mkuboot.sh Loading commit data...
mkversion Loading commit data...
module-common.lds Loading commit data...
namespace.pl Loading commit data...
patch-kernel Loading commit data...
pnmtologo.c Loading commit data...
profile2linkerlist.pl Loading commit data...
recordmcount.pl Loading commit data...
setlocalversion Loading commit data...
show_delta Loading commit data...
tags.sh Loading commit data...
unifdef.c Loading commit data...
ver_linux Loading commit data...