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