diff options
author | Michal Marek <mmarek@suse.cz> | 2009-12-12 06:02:24 -0500 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2009-12-15 00:58:37 -0500 |
commit | 8d99513c1b76cfd0b2dcf061c5136cb1061e6b37 (patch) | |
tree | be2ccab1e28b6ed28f166ddb06cc53beb7f40ce7 /scripts/mod/modpost.c | |
parent | d4703aefdbc8f9f347f6dcefcddd791294314eb7 (diff) |
modpost: fix segfault with short symbol names
memcmp() is wrong here, the symbol name can be shorter than KSYMTAB_PFX
or CRC_PFX.
Signed-off-by: Michal Marek <mmarek@suse.cz>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'scripts/mod/modpost.c')
-rw-r--r-- | scripts/mod/modpost.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index c16c0a0e2464..6c4ffc767b91 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c | |||
@@ -522,7 +522,7 @@ static void handle_modversions(struct module *mod, struct elf_info *info, | |||
522 | break; | 522 | break; |
523 | case SHN_ABS: | 523 | case SHN_ABS: |
524 | /* CRC'd symbol */ | 524 | /* CRC'd symbol */ |
525 | if (memcmp(symname, CRC_PFX, strlen(CRC_PFX)) == 0) { | 525 | if (strncmp(symname, CRC_PFX, strlen(CRC_PFX)) == 0) { |
526 | crc = (unsigned int) sym->st_value; | 526 | crc = (unsigned int) sym->st_value; |
527 | sym_update_crc(symname + strlen(CRC_PFX), mod, crc, | 527 | sym_update_crc(symname + strlen(CRC_PFX), mod, crc, |
528 | export); | 528 | export); |
@@ -566,7 +566,7 @@ static void handle_modversions(struct module *mod, struct elf_info *info, | |||
566 | break; | 566 | break; |
567 | default: | 567 | default: |
568 | /* All exported symbols */ | 568 | /* All exported symbols */ |
569 | if (memcmp(symname, KSYMTAB_PFX, strlen(KSYMTAB_PFX)) == 0) { | 569 | if (strncmp(symname, KSYMTAB_PFX, strlen(KSYMTAB_PFX)) == 0) { |
570 | sym_add_exported(symname + strlen(KSYMTAB_PFX), mod, | 570 | sym_add_exported(symname + strlen(KSYMTAB_PFX), mod, |
571 | export); | 571 | export); |
572 | } | 572 | } |