tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: How to prevent a mutex being _enter()ed from being _destroy()ed?
> Date: Fri, 10 Aug 2018 17:51:11 +0200
> From: Edgar Fuß <ef%math.uni-bonn.de@localhost>
>
> I'm currently running an 8.0_STABLE kernel on the machine (with 6.1_STABLE
> userland) and no panics so far. This smay be
> -- luck
> -- different timing that doesn't trigger the race
> -- a bug fixed since 6.1
>
> If someone remembers a bug in this area fixed since 6.1, we can stop here.
I don't remember a specific bug but that is entirely plausible. There
have been some possibly relevant changes, e.g. uipc_usrreq.c 1.175.
> What I guess is that that -16L is MUTEX_THREAD and was put there by
> MUTEX_DESTROY(), called by mutex_destroy() called by soput() by another
> thread that ran during the preemtion-enabled phase.
>
> Any other ideas on how that -16L could go there?
This sounds plausible.
> Could I install some hack, that, in soput(), would panic if the socket to be
> freed is the one unp_gc() is currently working on? If that would trigger, we'd
> get a useful traceback, no? And if that panic doesn't trigger, but the other
> one does, we'd know that some of my assumptions were wrong.
They are unlikely to coincide like that. More likely is that the
socket is prematurely freed before unp_gc grabs it at all.
You could do something like create a global variable that stores the
socket pointer that unp_gc is currently working on, shortly before it
tries solock, and kassert that soclose isn't given that. But I'm not
optimistic that there's enough of a window there for you to catch
anyone in the act.
Home |
Main Index |
Thread Index |
Old Index