Sat Jul 30 06:19:02 2011 UTC ()
Correct sizes to pass uvm_km_free(9) in error paths.
(uebayasi)
diff -r1.61 -r1.62 src/sys/kern/sysv_msg.c
diff -r1.87 -r1.88 src/sys/kern/sysv_sem.c
diff -r1.120 -r1.121 src/sys/kern/sysv_shm.c
--- src/sys/kern/sysv_msg.c 2009/01/28 00:59:03 1.61
+++ src/sys/kern/sysv_msg.c 2011/07/30 06:19:02 1.62
@@ -1,4 +1,4 @@
-/* $NetBSD: sysv_msg.c,v 1.61 2009/01/28 00:59:03 njoly Exp $ */
+/* $NetBSD: sysv_msg.c,v 1.62 2011/07/30 06:19:02 uebayasi Exp $ */
/*-
* Copyright (c) 1999, 2006, 2007 The NetBSD Foundation, Inc.
@@ -50,7 +50,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysv_msg.c,v 1.61 2009/01/28 00:59:03 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysv_msg.c,v 1.62 2011/07/30 06:19:02 uebayasi Exp $");
#define SYSVMSG
@@ -116,8 +116,8 @@
ALIGN(msginfo.msgseg * sizeof(struct msgmap)) +
ALIGN(msginfo.msgtql * sizeof(struct __msg)) +
ALIGN(msginfo.msgmni * sizeof(kmsq_t));
- v = uvm_km_alloc(kernel_map, round_page(sz), 0,
- UVM_KMF_WIRED|UVM_KMF_ZERO);
+ sz = round_page(sz);
+ v = uvm_km_alloc(kernel_map, sz, 0, UVM_KMF_WIRED|UVM_KMF_ZERO);
if (v == 0)
panic("sysv_msg: cannot allocate memory");
msgpool = (void *)v;
@@ -176,8 +176,8 @@
ALIGN(newmsgseg * sizeof(struct msgmap)) +
ALIGN(msginfo.msgtql * sizeof(struct __msg)) +
ALIGN(newmsgmni * sizeof(kmsq_t));
- v = uvm_km_alloc(kernel_map, round_page(sz), 0,
- UVM_KMF_WIRED|UVM_KMF_ZERO);
+ sz = round_page(sz);
+ v = uvm_km_alloc(kernel_map, sz, 0, UVM_KMF_WIRED|UVM_KMF_ZERO);
if (v == 0)
return ENOMEM;
@@ -339,6 +339,7 @@
ALIGN(msginfo.msgseg * sizeof(struct msgmap)) +
ALIGN(msginfo.msgtql * sizeof(struct __msg)) +
ALIGN(msginfo.msgmni * sizeof(kmsq_t));
+ sz = round_page(sz);
for (i = 0; i < msginfo.msgmni; i++)
cv_destroy(&msqs[i].msq_cv);
--- src/sys/kern/sysv_sem.c 2011/05/13 22:16:44 1.87
+++ src/sys/kern/sysv_sem.c 2011/07/30 06:19:02 1.88
@@ -1,4 +1,4 @@
-/* $NetBSD: sysv_sem.c,v 1.87 2011/05/13 22:16:44 rmind Exp $ */
+/* $NetBSD: sysv_sem.c,v 1.88 2011/07/30 06:19:02 uebayasi Exp $ */
/*-
* Copyright (c) 1999, 2007 The NetBSD Foundation, Inc.
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysv_sem.c,v 1.87 2011/05/13 22:16:44 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysv_sem.c,v 1.88 2011/07/30 06:19:02 uebayasi Exp $");
#define SYSVSEM
@@ -106,8 +106,8 @@
ALIGN(seminfo.semmns * sizeof(struct __sem)) +
ALIGN(seminfo.semmni * sizeof(kcondvar_t)) +
ALIGN(seminfo.semmnu * seminfo.semusz);
- v = uvm_km_alloc(kernel_map, round_page(sz), 0,
- UVM_KMF_WIRED|UVM_KMF_ZERO);
+ sz = round_page(sz);
+ v = uvm_km_alloc(kernel_map, sz, 0, UVM_KMF_WIRED|UVM_KMF_ZERO);
if (v == 0)
panic("sysv_sem: cannot allocate memory");
sema = (void *)v;
@@ -150,8 +150,8 @@
ALIGN(newsemmns * sizeof(struct __sem)) +
ALIGN(newsemmni * sizeof(kcondvar_t)) +
ALIGN(newsemmnu * seminfo.semusz);
- v = uvm_km_alloc(kernel_map, round_page(sz), 0,
- UVM_KMF_WIRED|UVM_KMF_ZERO);
+ sz = round_page(sz);
+ v = uvm_km_alloc(kernel_map, sz, 0, UVM_KMF_WIRED|UVM_KMF_ZERO);
if (v == 0)
return ENOMEM;
@@ -251,6 +251,7 @@
ALIGN(seminfo.semmns * sizeof(struct __sem)) +
ALIGN(seminfo.semmni * sizeof(kcondvar_t)) +
ALIGN(seminfo.semmnu * seminfo.semusz);
+ sz = round_page(sz);
/* Set the pointers and update the new values */
sema = new_sema;
--- src/sys/kern/sysv_shm.c 2011/06/12 03:35:56 1.120
+++ src/sys/kern/sysv_shm.c 2011/07/30 06:19:02 1.121
@@ -1,4 +1,4 @@
-/* $NetBSD: sysv_shm.c,v 1.120 2011/06/12 03:35:56 rmind Exp $ */
+/* $NetBSD: sysv_shm.c,v 1.121 2011/07/30 06:19:02 uebayasi Exp $ */
/*-
* Copyright (c) 1999, 2007 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysv_shm.c,v 1.120 2011/06/12 03:35:56 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysv_shm.c,v 1.121 2011/07/30 06:19:02 uebayasi Exp $");
#define SYSVSHM
@@ -877,8 +877,8 @@
/* Allocate new memory area */
sz = ALIGN(newshmni * sizeof(struct shmid_ds)) +
ALIGN(newshmni * sizeof(kcondvar_t));
- v = uvm_km_alloc(kernel_map, round_page(sz), 0,
- UVM_KMF_WIRED|UVM_KMF_ZERO);
+ sz = round_page(sz);
+ v = uvm_km_alloc(kernel_map, sz, 0, UVM_KMF_WIRED|UVM_KMF_ZERO);
if (v == 0)
return ENOMEM;
@@ -936,6 +936,7 @@
sz = ALIGN(oldshmni * sizeof(struct shmid_ds)) +
ALIGN(oldshmni * sizeof(kcondvar_t));
+ sz = round_page(sz);
uvm_km_free(kernel_map, (vaddr_t)oldshmsegs, sz, UVM_KMF_WIRED);
return 0;
@@ -954,8 +955,8 @@
/* Allocate the wired memory for our structures */
sz = ALIGN(shminfo.shmmni * sizeof(struct shmid_ds)) +
ALIGN(shminfo.shmmni * sizeof(kcondvar_t));
- v = uvm_km_alloc(kernel_map, round_page(sz), 0,
- UVM_KMF_WIRED|UVM_KMF_ZERO);
+ sz = round_page(sz);
+ v = uvm_km_alloc(kernel_map, sz, 0, UVM_KMF_WIRED|UVM_KMF_ZERO);
if (v == 0)
panic("sysv_shm: cannot allocate memory");
shmsegs = (void *)v;