Module Name:    src
Committed By:   christos
Date:           Sat Apr  4 15:22:02 UTC 2015

Modified Files:
        src/sys/dev/if_ndis: if_ndis_pci.c

Log Message:
don't leak rl (but there are other leaks), found by Brainy.


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/sys/dev/if_ndis/if_ndis_pci.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/if_ndis/if_ndis_pci.c
diff -u src/sys/dev/if_ndis/if_ndis_pci.c:1.20 src/sys/dev/if_ndis/if_ndis_pci.c:1.21
--- src/sys/dev/if_ndis/if_ndis_pci.c:1.20	Mon Sep  1 15:46:55 2014
+++ src/sys/dev/if_ndis/if_ndis_pci.c	Sat Apr  4 11:22:02 2015
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ndis_pci.c,v 1.20 2014/09/01 19:46:55 he Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ndis_pci.c,v 1.21 2015/04/04 15:22:02 christos Exp $");
 #ifdef __FreeBSD__
 __FBSDID("$FreeBSD: src/sys/dev/if_ndis/if_ndis_pci.c,v 1.8.2.3 2005/03/31 04:24:36 wpaul Exp $");
 #endif
@@ -204,6 +204,7 @@ void ndis_attach_pci(device_t parent, de
 	int revision, i;
 #endif
 	int bar;
+	size_t rllen;
 	
 	printf("in ndis_attach_pci()\n");
 
@@ -227,9 +228,9 @@ void ndis_attach_pci(device_t parent, de
 	
 	printf("sc->ndis_mtag = %x\n", (unsigned int)sc->ndis_mtag);
 
-	rl = malloc(sizeof(ndis_resource_list) +
-	    (sizeof(cm_partial_resource_desc) * (MAX_RESOURCES-1)),
-	    M_DEVBUF, M_NOWAIT|M_ZERO);
+	rllen = sizeof(ndis_resource_list) +
+	    sizeof(cm_partial_resource_desc) * (MAX_RESOURCES - 1);
+	rl = malloc(rllen, M_DEVBUF, M_NOWAIT|M_ZERO);
 
 	if(rl == NULL) {
 		sc->error = ENOMEM;
@@ -272,7 +273,7 @@ void ndis_attach_pci(device_t parent, de
 					malloc(sizeof(struct ndis_resource), M_DEVBUF, M_NOWAIT | M_ZERO)) == NULL) {
 					//printf("error: out of memory\n");
 					sc->error = ENOMEM;
-					return;
+					goto out;
 				}
 				sc->ndis_res_io->res_base = base;
 				sc->ndis_res_io->res_size = size;
@@ -293,7 +294,7 @@ void ndis_attach_pci(device_t parent, de
 					sc->ndis_res_altmem != NULL) {
 					printf("too many resources\n");
 					sc->error = ENXIO;
-					return;
+					goto out;
 				}
 				if(sc->ndis_res_mem) {
 					if((sc->ndis_res_altmem = 
@@ -317,7 +318,7 @@ void ndis_attach_pci(device_t parent, de
 					if((sc->ndis_res_mem = 
 						malloc(sizeof(struct ndis_resource), M_DEVBUF, M_NOWAIT | M_ZERO)) == NULL) {
 						sc->error = ENOMEM;
-						return;
+						goto out;
 					}
 					sc->ndis_res_mem->res_base = base;
 					sc->ndis_res_mem->res_size = size;
@@ -364,6 +365,10 @@ void ndis_attach_pci(device_t parent, de
 	
 	kthread_create(PRI_NONE, 0, NULL, ndis_attach, (void *)sc,
 	    NULL, "ndis_attach");
+	return;
+out:
+	free(rl, M_DEVBUF); 
+	return;
 }
 
 

Reply via email to