Date: Mon, 6 Aug 2018 12:43:06 -0700 From: Matthew Macy <mmacy@freebsd.org> To: Hans Petter Selasky <hps@selasky.org> Cc: Roman Bogorodskiy <novel@freebsd.org>, freebsd-current@freebsd.org Subject: Re: panic after ifioctl/if_clone_destroy Message-ID: <CAPrugNoivMkazen1R_5DkODaCYbL1dRoM9m1VEEmVDvMTW4Kmg@mail.gmail.com> In-Reply-To: <911d520a-4eb5-02b4-a119-3663a7537e6a@selasky.org> References: <20180805153556.GA1957@kloomba> <CAPrugNqVUoP0V8%2ByKTbCZgMoDu22xvCfUuga2LbKabjyi_=__A@mail.gmail.com> <a03803e6-5f1e-1960-c6a1-c7477f0ac9d4@selasky.org> <8acc8f27-29f2-d4c1-7473-f7053b14e7ad@selasky.org> <911d520a-4eb5-02b4-a119-3663a7537e6a@selasky.org>
next in thread | previous in thread | raw e-mail | index | archive | help
The struct thread is typesafe. The problem is that the link is no longer typesafe now that it=E2=80=99s not part of the thread. Thanks for pointing = this out. I=E2=80=99ll commit a fix later today. -M On Mon, Aug 6, 2018 at 02:39 Hans Petter Selasky <hps@selasky.org> wrote: > Hi Matthew, > > On 08/06/18 10:02, Hans Petter Selasky wrote: > > - if ((tdwait =3D TAILQ_FIRST(&record->er_tdlist)) !=3D NUL= L && > > - TD_IS_RUNNING(tdwait->et_td)) { > > At least the TD_IS_RUNNING() check is invalid. The "tdwait" structure is > in the control of the other CPU and "tdwait->et_td" might be invalid at > any time, so accessing any members here is not a good idea. > > It is pretty clear that the epoch was exited during the loop: > > etd->et_td =3D (void*)0xDEADBEEF; > > fault virtual address =3D 0xdeadc2ff > fault code =3D supervisor read data, page not present > > > If you remove the TD_IS_RUNNING() check I'm not sure how useful this > loop will be ... > > --HPS >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAPrugNoivMkazen1R_5DkODaCYbL1dRoM9m1VEEmVDvMTW4Kmg>