ahci.c memory leak in error path

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

ahci.c memory leak in error path

Benjamin Baier
Fix memory leak in error path.
Found by llvm/scan-build.

Also port (sc->sc_ports[port]) was not assigned, so "goto freeport;"
seems wrong.

Index: ahci.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/ahci.c,v
retrieving revision 1.22
diff -u -p -r1.22 ahci.c
--- ahci.c 27 Aug 2015 18:47:29 -0000 1.22
+++ ahci.c 26 Sep 2015 09:29:57 -0000
@@ -460,7 +460,8 @@ ahci_port_alloc(struct ahci_softc *sc, u
  if (ap->ap_err_scratch == NULL) {
  printf("%s: unable to allocate DMA scratch buf for port %d\n",
     DEVNAME(sc), port);
- goto freeport;
+ free(ap, M_DEVBUF, sizeof(*ap));
+ goto reterr;
  }
 
 #ifdef AHCI_DEBUG

Reply | Threaded
Open this post in threaded view
|

Re: ahci.c memory leak in error path

Jonathan Matthew-4
On Fri, Oct 02, 2015 at 02:37:18PM +0200, Benjamin Baier wrote:
> Fix memory leak in error path.
> Found by llvm/scan-build.

Thanks, I've just committed this.

>
> Also port (sc->sc_ports[port]) was not assigned, so "goto freeport;"
> seems wrong.
>
> Index: ahci.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/ic/ahci.c,v
> retrieving revision 1.22
> diff -u -p -r1.22 ahci.c
> --- ahci.c 27 Aug 2015 18:47:29 -0000 1.22
> +++ ahci.c 26 Sep 2015 09:29:57 -0000
> @@ -460,7 +460,8 @@ ahci_port_alloc(struct ahci_softc *sc, u
>   if (ap->ap_err_scratch == NULL) {
>   printf("%s: unable to allocate DMA scratch buf for port %d\n",
>      DEVNAME(sc), port);
> - goto freeport;
> + free(ap, M_DEVBUF, sizeof(*ap));
> + goto reterr;
>   }
>  
>  #ifdef AHCI_DEBUG
>