Module Name: src
Committed By: snj
Date: Mon Nov 10 17:59:57 UTC 2014
Modified Files:
src/sys/arch/arm/iomd [netbsd-7]: iomd_irqhandler.c
src/sys/arch/arm/ofw [netbsd-7]: ofw_irqhandler.c
src/sys/arch/atari/atari [netbsd-7]: intr.c
src/sys/arch/ews4800mips/sbd [netbsd-7]: fb_sbdio.c
src/sys/arch/hpcmips/tx [netbsd-7]: tx39icu.c
src/sys/arch/shark/isa [netbsd-7]: isa_irqhandler.c
src/sys/arch/sparc/sparc [netbsd-7]: machdep.c
src/sys/arch/sparc64/dev [netbsd-7]: psycho.c schizo.c
src/sys/arch/sparc64/sparc64 [netbsd-7]: machdep.c
src/sys/arch/sun68k/sun68k [netbsd-7]: bus.c
src/sys/arch/x86/x86 [netbsd-7]: ipmi.c
src/sys/arch/xen/xen [netbsd-7]: privcmd.c
Log Message:
Pull up following revision(s) (requested by maxv in ticket #195):
sys/arch/arm/iomd/iomd_irqhandler.c: revision 1.21
sys/arch/arm/ofw/ofw_irqhandler.c: revision 1.21
sys/arch/atari/atari/intr.c: revision 1.24-1.25
sys/arch/ews4800mips/sbd/fb_sbdio.c: revision 1.14
sys/arch/hpcmips/tx/tx39icu.c: revision 1.34
sys/arch/shark/isa/isa_irqhandler.c: revision 1.27
sys/arch/sparc/sparc/machdep.c: revision 1.327
sys/arch/sparc64/dev/psycho.c: revision 1.119
sys/arch/sparc64/dev/schizo.c: revision 1.32
sys/arch/sparc64/sparc64/machdep.c: revision 1.279
sys/arch/sun68k/sun68k/bus.c: revision 1.22
sys/arch/x86/x86/ipmi.c: revision 1.58
sys/arch/xen/xen/privcmd.c: revision 1.46-1.49
Fix several memory leaks.
To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.20.4.1 src/sys/arch/arm/iomd/iomd_irqhandler.c
cvs rdiff -u -r1.20 -r1.20.2.1 src/sys/arch/arm/ofw/ofw_irqhandler.c
cvs rdiff -u -r1.23 -r1.23.34.1 src/sys/arch/atari/atari/intr.c
cvs rdiff -u -r1.13 -r1.13.4.1 src/sys/arch/ews4800mips/sbd/fb_sbdio.c
cvs rdiff -u -r1.33 -r1.33.4.1 src/sys/arch/hpcmips/tx/tx39icu.c
cvs rdiff -u -r1.26 -r1.26.4.1 src/sys/arch/shark/isa/isa_irqhandler.c
cvs rdiff -u -r1.326 -r1.326.4.1 src/sys/arch/sparc/sparc/machdep.c
cvs rdiff -u -r1.118 -r1.118.4.1 src/sys/arch/sparc64/dev/psycho.c
cvs rdiff -u -r1.31 -r1.31.8.1 src/sys/arch/sparc64/dev/schizo.c
cvs rdiff -u -r1.278.2.1 -r1.278.2.2 src/sys/arch/sparc64/sparc64/machdep.c
cvs rdiff -u -r1.21 -r1.21.60.1 src/sys/arch/sun68k/sun68k/bus.c
cvs rdiff -u -r1.57 -r1.57.2.1 src/sys/arch/x86/x86/ipmi.c
cvs rdiff -u -r1.45 -r1.45.4.1 src/sys/arch/xen/xen/privcmd.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/arm/iomd/iomd_irqhandler.c
diff -u src/sys/arch/arm/iomd/iomd_irqhandler.c:1.20 src/sys/arch/arm/iomd/iomd_irqhandler.c:1.20.4.1
--- src/sys/arch/arm/iomd/iomd_irqhandler.c:1.20 Wed Mar 26 19:44:51 2014
+++ src/sys/arch/arm/iomd/iomd_irqhandler.c Mon Nov 10 17:59:56 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: iomd_irqhandler.c,v 1.20 2014/03/26 19:44:51 christos Exp $ */
+/* $NetBSD: iomd_irqhandler.c,v 1.20.4.1 2014/11/10 17:59:56 snj Exp $ */
/*
* Copyright (c) 1994-1998 Mark Brinicombe.
@@ -40,7 +40,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: iomd_irqhandler.c,v 1.20 2014/03/26 19:44:51 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: iomd_irqhandler.c,v 1.20.4.1 2014/11/10 17:59:56 snj Exp $");
#include "opt_irqstats.h"
@@ -356,8 +356,10 @@ intr_claim(int irq, int level, const cha
ih->ih_arg = ih_arg;
ih->ih_flags = 0;
- if (irq_claim(irq, ih) != 0)
+ if (irq_claim(irq, ih) != 0) {
+ free(ih, M_DEVBUF);
return NULL;
+ }
return ih;
}
Index: src/sys/arch/arm/ofw/ofw_irqhandler.c
diff -u src/sys/arch/arm/ofw/ofw_irqhandler.c:1.20 src/sys/arch/arm/ofw/ofw_irqhandler.c:1.20.2.1
--- src/sys/arch/arm/ofw/ofw_irqhandler.c:1.20 Fri Jun 20 13:17:59 2014
+++ src/sys/arch/arm/ofw/ofw_irqhandler.c Mon Nov 10 17:59:56 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: ofw_irqhandler.c,v 1.20 2014/06/20 13:17:59 joerg Exp $ */
+/* $NetBSD: ofw_irqhandler.c,v 1.20.2.1 2014/11/10 17:59:56 snj Exp $ */
/*
* Copyright (c) 1994-1998 Mark Brinicombe.
@@ -42,7 +42,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ofw_irqhandler.c,v 1.20 2014/06/20 13:17:59 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ofw_irqhandler.c,v 1.20.2.1 2014/11/10 17:59:56 snj Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -301,8 +301,10 @@ intr_claim(int irq, int level, int (*ih_
ih->ih_arg = ih_arg;
ih->ih_flags = 0;
- if (irq_claim(irq, ih, group, name) != 0)
+ if (irq_claim(irq, ih, group, name) != 0) {
+ free(ih, M_DEVBUF);
return(NULL);
+ }
return(ih);
}
Index: src/sys/arch/atari/atari/intr.c
diff -u src/sys/arch/atari/atari/intr.c:1.23 src/sys/arch/atari/atari/intr.c:1.23.34.1
--- src/sys/arch/atari/atari/intr.c:1.23 Mon Dec 20 00:25:30 2010
+++ src/sys/arch/atari/atari/intr.c Mon Nov 10 17:59:56 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: intr.c,v 1.23 2010/12/20 00:25:30 matt Exp $ */
+/* $NetBSD: intr.c,v 1.23.34.1 2014/11/10 17:59:56 snj Exp $ */
/*-
* Copyright (c) 1996 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.23 2010/12/20 00:25:30 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.23.34.1 2014/11/10 17:59:56 snj Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -132,21 +132,25 @@ intr_establish(int vector, int type, int
*/
switch (type & (AUTO_VEC|USER_VEC)) {
case AUTO_VEC:
- if (vector < AVEC_MIN || vector > AVEC_MAX)
+ if (vector < AVEC_MIN || vector > AVEC_MAX) {
+ free(ih, M_DEVBUF);
return NULL;
+ }
vec_list = &autovec_list[vector-1];
hard_vec = &autovects[vector-1];
ih->ih_intrcnt = &intrcnt_auto[vector-1];
break;
case USER_VEC:
- if (vector < UVEC_MIN || vector > UVEC_MAX)
+ if (vector < UVEC_MIN || vector > UVEC_MAX) {
+ free(ih, M_DEVBUF);
return NULL;
+ }
vec_list = &uservec_list[vector];
hard_vec = &uservects[vector];
ih->ih_intrcnt = &intrcnt_user[vector];
break;
default:
- printf("intr_establish: bogus vector type\n");
+ printf("%s: bogus vector type\n", __func__);
free(ih, M_DEVBUF);
return NULL;
}
Index: src/sys/arch/ews4800mips/sbd/fb_sbdio.c
diff -u src/sys/arch/ews4800mips/sbd/fb_sbdio.c:1.13 src/sys/arch/ews4800mips/sbd/fb_sbdio.c:1.13.4.1
--- src/sys/arch/ews4800mips/sbd/fb_sbdio.c:1.13 Fri Jan 31 15:41:48 2014
+++ src/sys/arch/ews4800mips/sbd/fb_sbdio.c Mon Nov 10 17:59:56 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: fb_sbdio.c,v 1.13 2014/01/31 15:41:48 tsutsui Exp $ */
+/* $NetBSD: fb_sbdio.c,v 1.13.4.1 2014/11/10 17:59:56 snj Exp $ */
/*-
* Copyright (c) 2004, 2005 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
#define WIRED_FB_TLB
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fb_sbdio.c,v 1.13 2014/01/31 15:41:48 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fb_sbdio.c,v 1.13.4.1 2014/11/10 17:59:56 snj Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -154,6 +154,7 @@ fb_sbdio_attach(device_t parent, device_
ga = malloc(sizeof(struct ga), M_DEVBUF, M_NOWAIT | M_ZERO);
if (ga == NULL) {
printf(":can't allocate ga memory\n");
+ free(ri, M_DEVBUF);
return;
}
ga->reg_paddr = sa->sa_addr2;
Index: src/sys/arch/hpcmips/tx/tx39icu.c
diff -u src/sys/arch/hpcmips/tx/tx39icu.c:1.33 src/sys/arch/hpcmips/tx/tx39icu.c:1.33.4.1
--- src/sys/arch/hpcmips/tx/tx39icu.c:1.33 Wed Mar 26 17:53:36 2014
+++ src/sys/arch/hpcmips/tx/tx39icu.c Mon Nov 10 17:59:56 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: tx39icu.c,v 1.33 2014/03/26 17:53:36 christos Exp $ */
+/* $NetBSD: tx39icu.c,v 1.33.4.1 2014/11/10 17:59:56 snj Exp $ */
/*-
* Copyright (c) 1999-2001 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tx39icu.c,v 1.33 2014/03/26 17:53:36 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tx39icu.c,v 1.33.4.1 2014/11/10 17:59:56 snj Exp $");
#include "opt_vr41xx.h"
#include "opt_tx39xx.h"
@@ -634,11 +634,9 @@ tx39_poll_establish(tx_chipset_tag_t tc,
s = splhigh();
sc = tc->tc_intrt;
- if (!(p = malloc(sizeof(struct txpoll_entry),
- M_DEVBUF, M_NOWAIT))) {
+ if (!(p = malloc(sizeof(*p), M_DEVBUF, M_NOWAIT | M_ZERO))) {
panic ("tx39_poll_establish: no memory.");
}
- memset(p, 0, sizeof(struct txpoll_entry));
p->p_fun = ih_fun;
p->p_arg = ih_arg;
@@ -647,13 +645,13 @@ tx39_poll_establish(tx_chipset_tag_t tc,
if (!sc->sc_polling) {
tx39clock_alarm_set(tc, 33); /* 33 msec */
- if (!(sc->sc_poll_ih =
- tx_intr_establish(
- tc, MAKEINTR(5, TX39_INTRSTATUS5_ALARMINT),
- IST_EDGE, level, tx39_poll_intr, sc))) {
+ if (!(sc->sc_poll_ih = tx_intr_establish(
+ tc, MAKEINTR(5, TX39_INTRSTATUS5_ALARMINT),
+ IST_EDGE, level, tx39_poll_intr, sc))) {
printf("tx39_poll_establish: can't hook\n");
splx(s);
+ free(p, M_DEVBUF);
return (0);
}
}
Index: src/sys/arch/shark/isa/isa_irqhandler.c
diff -u src/sys/arch/shark/isa/isa_irqhandler.c:1.26 src/sys/arch/shark/isa/isa_irqhandler.c:1.26.4.1
--- src/sys/arch/shark/isa/isa_irqhandler.c:1.26 Sat Feb 22 18:56:25 2014
+++ src/sys/arch/shark/isa/isa_irqhandler.c Mon Nov 10 17:59:56 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: isa_irqhandler.c,v 1.26 2014/02/22 18:56:25 matt Exp $ */
+/* $NetBSD: isa_irqhandler.c,v 1.26.4.1 2014/11/10 17:59:56 snj Exp $ */
/*
* Copyright 1997
@@ -75,7 +75,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: isa_irqhandler.c,v 1.26 2014/02/22 18:56:25 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: isa_irqhandler.c,v 1.26.4.1 2014/11/10 17:59:56 snj Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -320,8 +320,10 @@ intr_claim(int irq, int level, int (*ih_
ih->ih_arg = ih_arg;
ih->ih_flags = 0;
- if (irq_claim(irq, ih, group, name) != 0)
+ if (irq_claim(irq, ih, group, name) != 0) {
+ free(ih, M_DEVBUF);
return(NULL);
+ }
return(ih);
}
Index: src/sys/arch/sparc/sparc/machdep.c
diff -u src/sys/arch/sparc/sparc/machdep.c:1.326 src/sys/arch/sparc/sparc/machdep.c:1.326.4.1
--- src/sys/arch/sparc/sparc/machdep.c:1.326 Fri Feb 28 10:16:51 2014
+++ src/sys/arch/sparc/sparc/machdep.c Mon Nov 10 17:59:57 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.326 2014/02/28 10:16:51 skrll Exp $ */
+/* $NetBSD: machdep.c,v 1.326.4.1 2014/11/10 17:59:57 snj Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
@@ -71,7 +71,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.326 2014/02/28 10:16:51 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.326.4.1 2014/11/10 17:59:57 snj Exp $");
#include "opt_compat_netbsd.h"
#include "opt_compat_sunos.h"
@@ -1378,8 +1378,10 @@ _bus_dmamem_alloc(bus_dma_tag_t t, bus_s
*/
error = uvm_pglistalloc(size, low, high, 0, 0,
mlist, nsegs, (flags & BUS_DMA_NOWAIT) == 0);
- if (error)
+ if (error) {
+ free(mlist, M_DEVBUF);
return (error);
+ }
/*
* Simply keep a pointer around to the linked list, so
Index: src/sys/arch/sparc64/dev/psycho.c
diff -u src/sys/arch/sparc64/dev/psycho.c:1.118 src/sys/arch/sparc64/dev/psycho.c:1.118.4.1
--- src/sys/arch/sparc64/dev/psycho.c:1.118 Sat Dec 7 11:17:24 2013
+++ src/sys/arch/sparc64/dev/psycho.c Mon Nov 10 17:59:57 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: psycho.c,v 1.118 2013/12/07 11:17:24 nakayama Exp $ */
+/* $NetBSD: psycho.c,v 1.118.4.1 2014/11/10 17:59:57 snj Exp $ */
/*
* Copyright (c) 1999, 2000 Matthew R. Green
@@ -55,7 +55,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: psycho.c,v 1.118 2013/12/07 11:17:24 nakayama Exp $");
+__KERNEL_RCSID(0, "$NetBSD: psycho.c,v 1.118.4.1 2014/11/10 17:59:57 snj Exp $");
#include "opt_ddb.h"
@@ -1272,8 +1272,7 @@ psycho_intr_establish(bus_space_tag_t t,
int ino;
long vec = INTVEC(ihandle);
- ih = (struct intrhand *)
- malloc(sizeof(struct intrhand), M_DEVBUF, M_NOWAIT);
+ ih = malloc(sizeof(struct intrhand), M_DEVBUF, M_NOWAIT);
if (ih == NULL)
return (NULL);
@@ -1342,6 +1341,7 @@ psycho_intr_establish(bus_space_tag_t t,
}
printf("Cannot find interrupt vector %lx\n", vec);
+ free(ih, M_DEVBUF);
return (NULL);
found:
Index: src/sys/arch/sparc64/dev/schizo.c
diff -u src/sys/arch/sparc64/dev/schizo.c:1.31 src/sys/arch/sparc64/dev/schizo.c:1.31.8.1
--- src/sys/arch/sparc64/dev/schizo.c:1.31 Fri Jun 21 20:09:58 2013
+++ src/sys/arch/sparc64/dev/schizo.c Mon Nov 10 17:59:57 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: schizo.c,v 1.31 2013/06/21 20:09:58 nakayama Exp $ */
+/* $NetBSD: schizo.c,v 1.31.8.1 2014/11/10 17:59:57 snj Exp $ */
/* $OpenBSD: schizo.c,v 1.55 2008/08/18 20:29:37 brad Exp $ */
/*
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: schizo.c,v 1.31 2013/06/21 20:09:58 nakayama Exp $");
+__KERNEL_RCSID(0, "$NetBSD: schizo.c,v 1.31.8.1 2014/11/10 17:59:57 snj Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -195,6 +195,7 @@ schizo_attach(device_t parent, device_t
ma->ma_reg[0].ur_len,
BUS_SPACE_MAP_LINEAR, &pbm->sp_intrh)) {
aprint_error(": failed to interrupt map registers\n");
+ kmem_free(pbm, sizeof(*pbm));
return;
}
Index: src/sys/arch/sparc64/sparc64/machdep.c
diff -u src/sys/arch/sparc64/sparc64/machdep.c:1.278.2.1 src/sys/arch/sparc64/sparc64/machdep.c:1.278.2.2
--- src/sys/arch/sparc64/sparc64/machdep.c:1.278.2.1 Thu Oct 30 12:33:17 2014
+++ src/sys/arch/sparc64/sparc64/machdep.c Mon Nov 10 17:59:57 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.278.2.1 2014/10/30 12:33:17 martin Exp $ */
+/* $NetBSD: machdep.c,v 1.278.2.2 2014/11/10 17:59:57 snj Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
@@ -71,7 +71,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.278.2.1 2014/10/30 12:33:17 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.278.2.2 2014/11/10 17:59:57 snj Exp $");
#include "opt_ddb.h"
#include "opt_multiprocessor.h"
@@ -1441,8 +1441,10 @@ _bus_dmamem_alloc(bus_dma_tag_t t, bus_s
*/
error = uvm_pglistalloc(size, low, high,
alignment, boundary, pglist, nsegs, (flags & BUS_DMA_NOWAIT) == 0);
- if (error)
+ if (error) {
+ free(pglist, M_DEVBUF);
return (error);
+ }
/*
* Compute the location, size, and number of segments actually
Index: src/sys/arch/sun68k/sun68k/bus.c
diff -u src/sys/arch/sun68k/sun68k/bus.c:1.21 src/sys/arch/sun68k/sun68k/bus.c:1.21.60.1
--- src/sys/arch/sun68k/sun68k/bus.c:1.21 Wed Jun 4 12:41:41 2008
+++ src/sys/arch/sun68k/sun68k/bus.c Mon Nov 10 17:59:57 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: bus.c,v 1.21 2008/06/04 12:41:41 ad Exp $ */
+/* $NetBSD: bus.c,v 1.21.60.1 2014/11/10 17:59:57 snj Exp $ */
/*
* Copyright (c) 1982, 1986, 1990, 1993
@@ -153,7 +153,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bus.c,v 1.21 2008/06/04 12:41:41 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bus.c,v 1.21.60.1 2014/11/10 17:59:57 snj Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -266,8 +266,10 @@ extern paddr_t avail_end;
*/
error = uvm_pglistalloc(size, low, high, 0, 0,
mlist, nsegs, (flags & BUS_DMA_NOWAIT) == 0);
- if (error)
+ if (error) {
+ free(mlist, M_DEVBUF);
return (error);
+ }
/*
* Simply keep a pointer around to the linked list, so
Index: src/sys/arch/x86/x86/ipmi.c
diff -u src/sys/arch/x86/x86/ipmi.c:1.57 src/sys/arch/x86/x86/ipmi.c:1.57.2.1
--- src/sys/arch/x86/x86/ipmi.c:1.57 Sun Aug 10 16:44:34 2014
+++ src/sys/arch/x86/x86/ipmi.c Mon Nov 10 17:59:57 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: ipmi.c,v 1.57 2014/08/10 16:44:34 tls Exp $ */
+/* $NetBSD: ipmi.c,v 1.57.2.1 2014/11/10 17:59:57 snj Exp $ */
/*
* Copyright (c) 2006 Manuel Bouyer.
@@ -52,7 +52,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ipmi.c,v 1.57 2014/08/10 16:44:34 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipmi.c,v 1.57.2.1 2014/11/10 17:59:57 snj Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -1209,6 +1209,7 @@ get_sdr(struct ipmi_softc *sc, uint16_t
psdr + offset, NULL)) {
printf("ipmi: get chunk : %d,%d fails\n",
offset, len);
+ free(psdr, M_DEVBUF);
return (-1);
}
}
Index: src/sys/arch/xen/xen/privcmd.c
diff -u src/sys/arch/xen/xen/privcmd.c:1.45 src/sys/arch/xen/xen/privcmd.c:1.45.4.1
--- src/sys/arch/xen/xen/privcmd.c:1.45 Wed Nov 6 06:23:15 2013
+++ src/sys/arch/xen/xen/privcmd.c Mon Nov 10 17:59:57 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: privcmd.c,v 1.45 2013/11/06 06:23:15 mrg Exp $ */
+/* $NetBSD: privcmd.c,v 1.45.4.1 2014/11/10 17:59:57 snj Exp $ */
/*-
* Copyright (c) 2004 Christian Limpach.
@@ -27,7 +27,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: privcmd.c,v 1.45 2013/11/06 06:23:15 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: privcmd.c,v 1.45.4.1 2014/11/10 17:59:57 snj Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -553,7 +553,7 @@ privcmd_map_obj(struct vm_map *map, vadd
/* remove current entries */
uvm_unmap1(map, start, start + size, 0);
- obj = kmem_alloc(sizeof(struct privcmd_object), KM_SLEEP);
+ obj = kmem_alloc(sizeof(*obj), KM_SLEEP);
if (obj == NULL) {
kmem_free(maddr, sizeof(paddr_t) * npages);
return ENOMEM;
@@ -577,6 +577,9 @@ privcmd_map_obj(struct vm_map *map, vadd
}
if (newstart != start) {
printf("uvm_map didn't give us back our vm space\n");
+ uvm_unmap1(map, newstart, newstart + size, 0);
+ if (obj)
+ obj->uobj.pgops->pgo_detach(&obj->uobj);
return EINVAL;
}
return 0;