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;
> 

Reply via email to