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 **)®))
- 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 **)®))
- 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);
}