Module Name:    src
Committed By:   pgoyette
Date:           Wed Apr 10 10:03:50 UTC 2019

Modified Files:
        src/sys/kern: sysv_ipc.c sysv_msg.c sysv_sem.c sysv_shm.c
        src/sys/sys: msg.h sem.h shm.h

Log Message:
Replace some "panic()" calls with simple "printf() ; return error"

There's no good reason for these build-time parameters to be allowed to
panic the kernel when it is easy to simply disable the module code and
fail gracefully.

While we're at it, similarly replace panic() when malloc fails to also
fail gracefully.


To generate a diff of this commit:
cvs rdiff -u -r1.38 -r1.39 src/sys/kern/sysv_ipc.c
cvs rdiff -u -r1.73 -r1.74 src/sys/kern/sysv_msg.c
cvs rdiff -u -r1.96 -r1.97 src/sys/kern/sysv_sem.c
cvs rdiff -u -r1.133 -r1.134 src/sys/kern/sysv_shm.c
cvs rdiff -u -r1.26 -r1.27 src/sys/sys/msg.h
cvs rdiff -u -r1.32 -r1.33 src/sys/sys/sem.h
cvs rdiff -u -r1.51 -r1.52 src/sys/sys/shm.h

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

Modified files:

Index: src/sys/kern/sysv_ipc.c
diff -u src/sys/kern/sysv_ipc.c:1.38 src/sys/kern/sysv_ipc.c:1.39
--- src/sys/kern/sysv_ipc.c:1.38	Tue Apr  9 22:05:27 2019
+++ src/sys/kern/sysv_ipc.c	Wed Apr 10 10:03:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: sysv_ipc.c,v 1.38 2019/04/09 22:05:27 pgoyette Exp $	*/
+/*	$NetBSD: sysv_ipc.c,v 1.39 2019/04/10 10:03:50 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2007 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysv_ipc.c,v 1.38 2019/04/09 22:05:27 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysv_ipc.c,v 1.39 2019/04/10 10:03:50 pgoyette Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_sysv.h"
@@ -180,13 +180,30 @@ sysv_ipc_modcmd(modcmd_t cmd, void *arg)
 		 * sysctl data
 		 */
 #ifdef SYSVSHM
-		shminit(&sysctl_sysvipc_clog);
+		error = shminit(&sysctl_sysvipc_clog);
+		if (error != 0)
+			return error;
 #endif
 #ifdef SYSVSEM
-		seminit(&sysctl_sysvipc_clog);
+		error = seminit(&sysctl_sysvipc_clog);
+		if (error != 0) {
+#ifdef SYSVSHM
+			shmfini();
+#endif
+			return error;
+		}
 #endif
 #ifdef SYSVMSG
-		msginit(&sysctl_sysvipc_clog);
+		error = msginit(&sysctl_sysvipc_clog);
+		if (error != 0) {
+#ifdef SYSVSEM
+			semfini();
+#endif
+#ifdef SYSVSHM
+			shmfini();
+#endif
+			return error;
+		}
 #endif
 
 #ifdef _MODULE

Index: src/sys/kern/sysv_msg.c
diff -u src/sys/kern/sysv_msg.c:1.73 src/sys/kern/sysv_msg.c:1.74
--- src/sys/kern/sysv_msg.c:1.73	Thu Feb 21 03:37:19 2019
+++ src/sys/kern/sysv_msg.c	Wed Apr 10 10:03:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: sysv_msg.c,v 1.73 2019/02/21 03:37:19 mrg Exp $	*/
+/*	$NetBSD: sysv_msg.c,v 1.74 2019/04/10 10:03:50 pgoyette 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.73 2019/02/21 03:37:19 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysv_msg.c,v 1.74 2019/04/10 10:03:50 pgoyette Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_sysv.h"
@@ -93,7 +93,7 @@ extern int kern_has_sysvmsg;
 
 SYSCTL_SETUP_PROTO(sysctl_ipc_msg_setup);
 
-void
+int
 msginit(struct sysctllog **clog)
 {
 	int i, sz;
@@ -109,12 +109,14 @@ msginit(struct sysctllog **clog)
 	while (i < 1024 && i != msginfo.msgssz)
 		i <<= 1;
 	if (i != msginfo.msgssz) {
-		panic("msginfo.msgssz = %d, not a small power of 2",
+		printf("msginfo.msgssz = %d, not a small power of 2",
 		    msginfo.msgssz);
+		return EINVAL;
 	}
 
 	if (msginfo.msgseg > 32767) {
-		panic("msginfo.msgseg = %d > 32767", msginfo.msgseg);
+		printf("msginfo.msgseg = %d > 32767", msginfo.msgseg);
+		return EINVAL;
 	}
 
 	/* Allocate the wired memory for our structures */
@@ -124,8 +126,10 @@ msginit(struct sysctllog **clog)
 	    ALIGN(msginfo.msgmni * sizeof(kmsq_t));
 	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");
+	if (v == 0) {
+		printf("sysv_msg: cannot allocate memory");
+		return ENOMEM;
+	}
 	msgpool = (void *)v;
 	msgmaps = (void *)((uintptr_t)msgpool + ALIGN(msginfo.msgmax));
 	msghdrs = (void *)((uintptr_t)msgmaps +
@@ -167,6 +171,7 @@ msginit(struct sysctllog **clog)
 	if (clog)
 		sysctl_ipc_msg_setup(clog);
 #endif
+	return 0;
 }
 
 int

Index: src/sys/kern/sysv_sem.c
diff -u src/sys/kern/sysv_sem.c:1.96 src/sys/kern/sysv_sem.c:1.97
--- src/sys/kern/sysv_sem.c:1.96	Thu Feb 21 03:37:19 2019
+++ src/sys/kern/sysv_sem.c	Wed Apr 10 10:03:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: sysv_sem.c,v 1.96 2019/02/21 03:37:19 mrg Exp $	*/
+/*	$NetBSD: sysv_sem.c,v 1.97 2019/04/10 10:03:50 pgoyette 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.96 2019/02/21 03:37:19 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysv_sem.c,v 1.97 2019/04/10 10:03:50 pgoyette Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_sysv.h"
@@ -101,7 +101,7 @@ void semundo_clear(int, int);
 static ONCE_DECL(exithook_control);
 static int seminit_exithook(void);
 
-void
+int
 seminit(struct sysctllog **clog)
 {
 	int i, sz;
@@ -120,8 +120,10 @@ seminit(struct sysctllog **clog)
 	    ALIGN(seminfo.semmnu * seminfo.semusz);
 	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");
+	if (v == 0) {
+		printf("sysv_sem: cannot allocate memory");
+		return ENOMEM;
+	}
 	sema = (void *)v;
 	sem = (void *)((uintptr_t)sema +
 	    ALIGN(seminfo.semmni * sizeof(struct semid_ds)));
@@ -147,6 +149,7 @@ seminit(struct sysctllog **clog)
 	if (clog)
 		sysctl_ipc_sem_setup(clog);
 #endif
+	return 0;
 }
 
 static int

Index: src/sys/kern/sysv_shm.c
diff -u src/sys/kern/sysv_shm.c:1.133 src/sys/kern/sysv_shm.c:1.134
--- src/sys/kern/sysv_shm.c:1.133	Thu Feb 21 03:37:19 2019
+++ src/sys/kern/sysv_shm.c	Wed Apr 10 10:03:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: sysv_shm.c,v 1.133 2019/02/21 03:37:19 mrg Exp $	*/
+/*	$NetBSD: sysv_shm.c,v 1.134 2019/04/10 10:03:50 pgoyette 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.133 2019/02/21 03:37:19 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysv_shm.c,v 1.134 2019/04/10 10:03:50 pgoyette Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_sysv.h"
@@ -962,7 +962,7 @@ shmrealloc(int newshmni)
 	return 0;
 }
 
-void
+int
 shminit(struct sysctllog **clog)
 {
 	vaddr_t v;
@@ -977,8 +977,10 @@ shminit(struct sysctllog **clog)
 	    ALIGN(shminfo.shmmni * sizeof(kcondvar_t));
 	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");
+	if (v == 0) {
+		printf("sysv_shm: cannot allocate memory");
+		return ENOMEM;
+	}
 	shmsegs = (void *)v;
 	shm_cv = (void *)((uintptr_t)shmsegs +
 	    ALIGN(shminfo.shmmni * sizeof(struct shmid_ds)));
@@ -1010,6 +1012,7 @@ shminit(struct sysctllog **clog)
 	if (clog)
 		sysctl_ipc_shm_setup(clog);
 #endif
+	return 0;
 }
 
 int

Index: src/sys/sys/msg.h
diff -u src/sys/sys/msg.h:1.26 src/sys/sys/msg.h:1.27
--- src/sys/sys/msg.h:1.26	Fri Nov  6 02:26:42 2015
+++ src/sys/sys/msg.h	Wed Apr 10 10:03:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg.h,v 1.26 2015/11/06 02:26:42 pgoyette Exp $	*/
+/*	$NetBSD: msg.h,v 1.27 2019/04/10 10:03:50 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2007 The NetBSD Foundation, Inc.
@@ -209,7 +209,7 @@ __END_DECLS
 
 struct proc;
 
-void	msginit(struct sysctllog **);
+int	msginit(struct sysctllog **);
 int	msgfini(void);
 int	msgctl1(struct lwp *, int, int, struct msqid_ds *);
 int	msgsnd1(struct lwp *, int, const char *, size_t, int, size_t,

Index: src/sys/sys/sem.h
diff -u src/sys/sys/sem.h:1.32 src/sys/sys/sem.h:1.33
--- src/sys/sys/sem.h:1.32	Fri Nov  6 02:26:42 2015
+++ src/sys/sys/sem.h	Wed Apr 10 10:03:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: sem.h,v 1.32 2015/11/06 02:26:42 pgoyette Exp $	*/
+/*	$NetBSD: sem.h,v 1.33 2019/04/10 10:03:50 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -222,7 +222,7 @@ int	semconfig(int);
 #endif
 __END_DECLS
 #else
-void	seminit(struct sysctllog **);
+int	seminit(struct sysctllog **);
 int	semfini(void);
 void	semexit(struct proc *, void *);
 

Index: src/sys/sys/shm.h
diff -u src/sys/sys/shm.h:1.51 src/sys/sys/shm.h:1.52
--- src/sys/sys/shm.h:1.51	Fri Nov  6 02:26:42 2015
+++ src/sys/sys/shm.h	Wed Apr 10 10:03:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: shm.h,v 1.51 2015/11/06 02:26:42 pgoyette Exp $	*/
+/*	$NetBSD: shm.h,v 1.52 2019/04/10 10:03:50 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -172,7 +172,7 @@ extern int shm_nused;
 
 struct vmspace;
 
-void	shminit(struct sysctllog **);
+int	shminit(struct sysctllog **);
 int	shmfini(void);
 void	shmfork(struct vmspace *, struct vmspace *);
 void	shmexit(struct vmspace *);

Reply via email to