Ping.

On malloc error symtab is unmapped, so proceeding on will lead to a NULL pointer
dereference.

On Wed, 20 Feb 2019 17:55:08 +0100
Benjamin Baier <program...@netzbasis.de> wrote:

> Hi.
> 
> When malloc fails we should return like the MMAP case does.
> 
> Greetings Ben
> 
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;

Reply via email to