NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kern/54922: 9.99.45@20200202 panic: diagnostic assertion linux ldconfig triggers vpp != NULL in exit1()->radixtree.c line 674
The following reply was made to PR kern/54922; it has been noted by GNATS.
From: Joerg Sonnenberger <joerg%bec.de@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc: kern-bug-people%netbsd.org@localhost, gnats-admin%netbsd.org@localhost,
netbsd-bugs%netbsd.org@localhost, kardel%netbsd.org@localhost
Subject: Re: kern/54922: 9.99.45@20200202 panic: diagnostic assertion linux
ldconfig triggers vpp != NULL in exit1()->radixtree.c line 674
Date: Wed, 5 Feb 2020 01:04:57 +0100
--gKMricLos+KVdGMg
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
On Tue, Feb 04, 2020 at 11:40:01PM +0000, Andrew Doran wrote:
> The following reply was made to PR kern/54922; it has been noted by GNATS.
>
> From: Andrew Doran <ad%netbsd.org@localhost>
> To: gnats-bugs%netbsd.org@localhost
> Cc:
> Subject: Re: kern/54922: 9.99.45@20200202 panic: diagnostic assertion linux
> ldconfig triggers vpp != NULL in exit1()->radixtree.c line 674
> Date: Tue, 4 Feb 2020 23:36:14 +0000
>
> It looks like I missed two cases where the LID is being changed on the fly:
> in linux_e_proc_exec() and linux_e_proc_fork(). Wouldn't think compat code
> would be doing something like that, but there it is. Ugh.
I've run into this as well. The attached patch seems to work.
Joerg
--gKMricLos+KVdGMg
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="linux-radix-hack.diff"
diff -r 7bd8a382b8db sys/compat/linux/common/linux_exec.c
--- a/sys/compat/linux/common/linux_exec.c Thu Jan 30 21:39:28 2020 +0100
+++ b/sys/compat/linux/common/linux_exec.c Wed Feb 05 01:04:22 2020 +0100
@@ -130,6 +130,10 @@
KASSERT(p->p_nlwps == 1);
l = LIST_FIRST(&p->p_lwps);
mutex_enter(p->p_lock);
+ if (l->l_lid != p->p_pid) {
+ radix_tree_remove_node(&p->p_lwptree, (uint64_t)(l->l_lid - 1));
+ radix_tree_insert_node(&p->p_lwptree, (uint64_t)(p->p_pid - 1), l);
+ }
l->l_lid = p->p_pid;
mutex_exit(p->p_lock);
}
@@ -152,6 +156,10 @@
KASSERT(p2->p_nlwps == 1);
l2 = LIST_FIRST(&p2->p_lwps);
+ if (l2->l_lid != p2->p_pid) {
+ radix_tree_remove_node(&p2->p_lwptree, (uint64_t)(l2->l_lid - 1));
+ radix_tree_insert_node(&p2->p_lwptree, (uint64_t)(p2->p_pid - 1), l2);
+ }
l2->l_lid = p2->p_pid;
led1 = l1->l_emuldata;
led2 = l2->l_emuldata;
--gKMricLos+KVdGMg--
Home |
Main Index |
Thread Index |
Old Index