Module Name: src Committed By: dholland Date: Sat Jan 9 07:52:38 UTC 2016
Modified Files: src/sys/kern: kern_fork.c sys_process.c Log Message: When doing an unlock/relock dance to avoid lock inversion, it's important to relock the lock you unlocked. Otherwise the lock you unlocked won't walk the walk, not by a long chalk, and you'll end up getting mocked. >From Mateusz Guzik of FreeBSD via freenode. XXX: pullup-6 and -7 To generate a diff of this commit: cvs rdiff -u -r1.194 -r1.195 src/sys/kern/kern_fork.c cvs rdiff -u -r1.166 -r1.167 src/sys/kern/sys_process.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_fork.c diff -u src/sys/kern/kern_fork.c:1.194 src/sys/kern/kern_fork.c:1.195 --- src/sys/kern/kern_fork.c:1.194 Fri Oct 2 16:54:15 2015 +++ src/sys/kern/kern_fork.c Sat Jan 9 07:52:38 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_fork.c,v 1.194 2015/10/02 16:54:15 christos Exp $ */ +/* $NetBSD: kern_fork.c,v 1.195 2016/01/09 07:52:38 dholland Exp $ */ /*- * Copyright (c) 1999, 2001, 2004, 2006, 2007, 2008 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_fork.c,v 1.194 2015/10/02 16:54:15 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_fork.c,v 1.195 2016/01/09 07:52:38 dholland Exp $"); #include "opt_ktrace.h" #include "opt_dtrace.h" @@ -486,6 +486,7 @@ fork1(struct lwp *l1, int flags, int exi if (!mutex_tryenter(parent1->p_lock)) { mutex_exit(p2->p_lock); mutex_enter(parent1->p_lock); + mutex_enter(p2->p_lock); } } else if (parent1->p_lock > p2->p_lock) { mutex_enter(parent1->p_lock); Index: src/sys/kern/sys_process.c diff -u src/sys/kern/sys_process.c:1.166 src/sys/kern/sys_process.c:1.167 --- src/sys/kern/sys_process.c:1.166 Thu Jul 2 03:47:54 2015 +++ src/sys/kern/sys_process.c Sat Jan 9 07:52:38 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: sys_process.c,v 1.166 2015/07/02 03:47:54 christos Exp $ */ +/* $NetBSD: sys_process.c,v 1.167 2016/01/09 07:52:38 dholland Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -118,7 +118,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sys_process.c,v 1.166 2015/07/02 03:47:54 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sys_process.c,v 1.167 2016/01/09 07:52:38 dholland Exp $"); #include "opt_ptrace.h" #include "opt_ktrace.h" @@ -782,6 +782,7 @@ sys_ptrace(struct lwp *l, const struct s if (!mutex_tryenter(parent->p_lock)) { mutex_exit(t->p_lock); mutex_enter(parent->p_lock); + mutex_enter(t->p_lock); } } else if (parent->p_lock > t->p_lock) { mutex_enter(parent->p_lock);