Module Name: src Committed By: joerg Date: Thu Nov 7 19:45:18 UTC 2019
Modified Files: src/sys/kern: kern_lwp.c Log Message: Preserve the LWP ID of the calling thread on (v)fork. This ensures that _lwp_self() remains invariant as necessary for the locking in the dynamic linker. Otherwise if a process creates a thread and forks from it, the main thread of the parent would share the LWP ID of the main thread of the child, even though they have different origins. Partial fix for pkg/54192. To generate a diff of this commit: cvs rdiff -u -r1.205 -r1.206 src/sys/kern/kern_lwp.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_lwp.c diff -u src/sys/kern/kern_lwp.c:1.205 src/sys/kern/kern_lwp.c:1.206 --- src/sys/kern/kern_lwp.c:1.205 Sun Oct 6 15:11:17 2019 +++ src/sys/kern/kern_lwp.c Thu Nov 7 19:45:18 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_lwp.c,v 1.205 2019/10/06 15:11:17 uwe Exp $ */ +/* $NetBSD: kern_lwp.c,v 1.206 2019/11/07 19:45:18 joerg Exp $ */ /*- * Copyright (c) 2001, 2006, 2007, 2008, 2009 The NetBSD Foundation, Inc. @@ -211,7 +211,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_lwp.c,v 1.205 2019/10/06 15:11:17 uwe Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_lwp.c,v 1.206 2019/11/07 19:45:18 joerg Exp $"); #include "opt_ddb.h" #include "opt_lockdebug.h" @@ -902,6 +902,8 @@ lwp_create(lwp_t *l1, proc_t *p2, vaddr_ if ((flags & LWP_PIDLID) != 0) { lid = proc_alloc_pid(p2); l2->l_pflag |= LP_PIDLID; + } else if (p2->p_nlwps == 0) { + lid = l1->l_lid; } else { lid = 0; }