Module Name: src Committed By: martin Date: Fri Sep 9 18:20:51 UTC 2022
Modified Files: src/sys/kern [netbsd-9]: kern_core.c Log Message: Pull up following revision(s) (requested by christos in ticket #1516): sys/kern/kern_core.c: revision 1.36 Don't forget to free the cred we just held. Thanks to Chris J-D (chris at accessvector dot net) While here, de-duplicate the mutex exit sequence. To generate a diff of this commit: cvs rdiff -u -r1.24.22.1 -r1.24.22.2 src/sys/kern/kern_core.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/kern/kern_core.c diff -u src/sys/kern/kern_core.c:1.24.22.1 src/sys/kern/kern_core.c:1.24.22.2 --- src/sys/kern/kern_core.c:1.24.22.1 Mon Nov 11 17:11:07 2019 +++ src/sys/kern/kern_core.c Fri Sep 9 18:20:51 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_core.c,v 1.24.22.1 2019/11/11 17:11:07 martin Exp $ */ +/* $NetBSD: kern_core.c,v 1.24.22.2 2022/09/09 18:20:51 martin Exp $ */ /* * Copyright (c) 1982, 1986, 1989, 1991, 1993 @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_core.c,v 1.24.22.1 2019/11/11 17:11:07 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_core.c,v 1.24.22.2 2022/09/09 18:20:51 martin Exp $"); #include <sys/param.h> #include <sys/vnode.h> @@ -97,7 +97,7 @@ coredump(struct lwp *l, const char *patt struct vnode *vp; struct proc *p; struct vmspace *vm; - kauth_cred_t cred; + kauth_cred_t cred = NULL; struct pathbuf *pb; struct nameidata nd; struct vattr vattr; @@ -122,9 +122,7 @@ coredump(struct lwp *l, const char *patt if (USPACE + ctob(vm->vm_dsize + vm->vm_ssize) >= p->p_rlimit[RLIMIT_CORE].rlim_cur) { error = EFBIG; /* better error code? */ - mutex_exit(p->p_lock); - mutex_exit(proc_lock); - goto done; + goto release; } /* @@ -141,9 +139,7 @@ coredump(struct lwp *l, const char *patt if (p->p_flag & PK_SUGID) { if (!security_setidcore_dump) { error = EPERM; - mutex_exit(p->p_lock); - mutex_exit(proc_lock); - goto done; + goto release; } pattern = security_setidcore_path; } @@ -157,11 +153,8 @@ coredump(struct lwp *l, const char *patt error = coredump_buildname(p, name, pattern, MAXPATHLEN); mutex_exit(&lim->pl_lock); - if (error) { - mutex_exit(p->p_lock); - mutex_exit(proc_lock); - goto done; - } + if (error) + goto release; /* * On a simple filename, see if the filesystem allow us to write @@ -175,6 +168,7 @@ coredump(struct lwp *l, const char *patt error = EPERM; } +release: mutex_exit(p->p_lock); mutex_exit(proc_lock); if (error) @@ -262,6 +256,8 @@ coredump(struct lwp *l, const char *patt if (error == 0) error = error1; done: + if (cred != NULL) + kauth_cred_free(cred); if (name != NULL) PNBUF_PUT(name); return error;