Hi,
Benjamin Baier wrote on Sat, Mar 02, 2019 at 10:10:40AM +0100:
> On malloc error symtab is unmapped, so proceeding on will lead
> to a NULL pointer dereference.
> When malloc fails we should return like the MMAP case does.
Committed.
Thanks for the patch (and to those who checked it).
Ingo
> Index: nm.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/nm/nm.c,v
> retrieving revision 1.53
> diff -u -p -u -C10 -r1.53 nm.c
> *** nm.c 27 Oct 2017 16:47:08 -0000 1.53
> --- nm.c 20 Feb 2019 17:34:01 -0000
> *************** show_symtab(off_t off, u_long len, const
> *** 374,393 ****
> --- 374,394 ----
> restore = ftello(fp);
>
> MMAP(symtab, len, PROT_READ, MAP_PRIVATE|MAP_FILE, fileno(fp), off);
> if (symtab == MAP_FAILED)
> return (1);
>
> namelen = sizeof(ar_head.ar_name);
> if ((p = malloc(sizeof(ar_head.ar_name))) == NULL) {
> warn("%s: malloc", name);
> MUNMAP(symtab, len);
> + return (1);
> }
>
> printf("\nArchive index:\n");
> num = betoh32(*symtab);
> strtab = (char *)(symtab + num + 1);
> for (ps = symtab + 1; num--; ps++, strtab += strlen(strtab) + 1) {
> if (fseeko(fp, betoh32(*ps), SEEK_SET)) {
> warn("%s: fseeko", name);
> rval = 1;
> break;
>