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

Reply via email to