On Mon, Jun 12, 2023 at 09:04:41PM +0200, Why 42? The lists account. wrote:
>
> On Wed, Jun 07, 2023 at 03:50:29PM +0300, Vitaliy Makkoveev wrote:
> > > ...
> > > Please, share your dvmrpd.conf.
> > >
> >
> > Also, you could try to use ktrace to provide some additional info.
>
>
> Hi Again,
>
> On site I had to power cycle the ThinkPad to be able to get control.
>
> The contents of the dvmrpd config file should be visible here:
> dvmrpd.conf+ifconfig.jpg https://paste.c-net.org/SlimeReply
>
> In order to be able to show progress, I tried using "mrouted" instead.
> It seems to have resulted in much the same panic.
> So apparently the problem may not specific to dvmrpd.
> Maybe something related to the USB Ethernet adaptor? I see some
> references to both "ure" and "usb" in the stack traces ...
>
> See for example:
> mrouted_panic.jpg https://paste.c-net.org/YolandaSamir
> ddb_show_panic+trace.jpg https://paste.c-net.org/TrackParent
> ddbcpu0+1.jpg https://paste.c-net.org/HansonAinsley
> ddbcpu3+4+5.jpg https://paste.c-net.org/MidtermsComposer
> ddbcpu6+7.jpg https://paste.c-net.org/CostaScratchy
>
> Sorry about all the photos, it was the best I could do. I'm driving the
> system via a pretty rubbish KVM switch.
>
> Hope this helps with the analysis. In the meantime I'll look around for
> some other multicast routing solution.
>
> Cheers,
> Robb.
>
We have missing kernel lock around (*if_sysctl)(). Diff below should fix
it.
Index: sys/netinet/ip_mroute.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_mroute.c,v
retrieving revision 1.138
diff -u -p -r1.138 ip_mroute.c
--- sys/netinet/ip_mroute.c 19 Apr 2023 20:03:51 -0000 1.138
+++ sys/netinet/ip_mroute.c 12 Jun 2023 20:55:05 -0000
@@ -718,7 +718,9 @@ add_vif(struct socket *so, struct mbuf *
satosin(&ifr.ifr_addr)->sin_len = sizeof(struct sockaddr_in);
satosin(&ifr.ifr_addr)->sin_family = AF_INET;
satosin(&ifr.ifr_addr)->sin_addr = zeroin_addr;
+ KERNEL_LOCK();
error = (*ifp->if_ioctl)(ifp, SIOCADDMULTI, (caddr_t)&ifr);
+ KERNEL_UNLOCK();
if (error)
return (error);
}