Module Name:    src
Committed By:   palle
Date:           Fri Feb 17 20:53:17 UTC 2017

Modified Files:
        src/sys/arch/sparc64/dev: vbus.c

Log Message:
sun4v: Fix potential memory leaks - spotted by maxv@


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/sparc64/dev/vbus.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/arch/sparc64/dev/vbus.c
diff -u src/sys/arch/sparc64/dev/vbus.c:1.2 src/sys/arch/sparc64/dev/vbus.c:1.3
--- src/sys/arch/sparc64/dev/vbus.c:1.2	Tue Jun 21 20:36:02 2016
+++ src/sys/arch/sparc64/dev/vbus.c	Fri Feb 17 20:53:17 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: vbus.c,v 1.2 2016/06/21 20:36:02 palle Exp $	*/
+/*	$NetBSD: vbus.c,v 1.3 2017/02/17 20:53:17 palle Exp $	*/
 /*	$OpenBSD: vbus.c,v 1.8 2015/09/27 11:29:20 kettenis Exp $	*/
 /*
  * Copyright (c) 2008 Mark Kettenis
@@ -159,15 +159,15 @@ vbus_intr_map(int node, int ino, uint64_
 	if (imap_mask == NULL)
 		return (-1);
 	if (OF_getprop(parent, "interrupt-map-mask", imap_mask, len) != len)
-		return (-1);
+		goto out;
 
 	if (prom_getprop(parent, "interrupt-map", sizeof(int), &nimap, (void **)&imap))
-	  panic("vbus: can't get interrupt-map");
+		panic("vbus: can't get interrupt-map");
 
 	if (prom_getprop(node, "reg", sizeof(*reg), &nreg, (void **)&reg))
-		  panic("vbus: can't get reg");
+		panic("vbus: can't get reg");
 	if (nreg < address_cells)
-		return (-1);
+		goto out;
 
 	while (nimap >= address_cells + interrupt_cells + 2) {
 		if (vbus_cmp_cells(imap, reg, imap_mask, address_cells) &&
@@ -180,21 +180,24 @@ vbus_intr_map(int node, int ino, uint64_
 			reg = NULL;
 
 			if (prom_getprop(node, "reg", sizeof(*reg), &nreg, (void **)&reg))
-			  panic("vbus: can't get reg");
+				panic("vbus: can't get reg");
 
 			devhandle = reg[0] & 0x0fffffff;
 
 			err = hv_intr_devino_to_sysino(devhandle, devino, sysino);
 			if (err != H_EOK)
-			  return (-1);
+				goto out;
 
 			KASSERT(*sysino == INTVEC(*sysino));
+			free(imap_mask, M_DEVBUF);
 			return (0);
 		}
 		imap += address_cells + interrupt_cells + 2;
 		nimap -= address_cells + interrupt_cells + 2;
 	}
 
+out:
+	free(imap_mask, M_DEVBUF);
 	return (-1);
 }
 

Reply via email to