On Fri, Jun 10, 2016 at 01:58:50PM +0200, Imre Vadasz wrote:
> Hi,
> 
> After parsing the nvm_sections data in iwm_nvm_init(), we can free the
> nvm_sections[i].data allocations again.
> 
> In the iwm_attach() failure path, the iwm_free_rx_ring() call for freeing
> the rx ring memory was missing.
> 

Committed, thanks!

> Index: if_iwm.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/if_iwm.c,v
> retrieving revision 1.86
> diff -u -r1.86 if_iwm.c
> --- if_iwm.c  3 Jun 2016 16:16:25 -0000       1.86
> +++ if_iwm.c  10 Jun 2016 11:47:29 -0000
> @@ -3085,10 +3085,16 @@
>               nvm_sections[section].length = len;
>       }
>       free(buf, M_DEVBUF, bufsz);
> -     if (error)
> -             return error;
> +     if (error == 0)
> +             error = iwm_parse_nvm_sections(sc, nvm_sections);
>  
> -     return iwm_parse_nvm_sections(sc, nvm_sections);
> +     for (i = 0; i < IWM_NVM_NUM_OF_SECTIONS; i++) {
> +             if (nvm_sections[i].data != NULL)
> +                     free(nvm_sections[i].data, M_DEVBUF,
> +                         nvm_sections[i].length);
> +     }
> +
> +     return error;
>  }
>  
>  /*
> @@ -8055,6 +8061,7 @@
>       /* Free allocated memory if something failed during attachment. */
>  fail4:       while (--txq_i >= 0)
>               iwm_free_tx_ring(sc, &sc->txq[txq_i]);
> +     iwm_free_rx_ring(sc, &sc->rxq);
>       iwm_free_sched(sc);
>  fail3:       if (sc->ict_dma.vaddr != NULL)
>               iwm_free_ict(sc);
> 

Reply via email to