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); }