On Mon, 26 Sep 2011 16:12:55 +0200 K. Macy wrote: KM> Sorry, didn't look at the images (limited bw), I've seen something KM> like this before in timewait. This "can't happen" with UDP so will be KM> interested in learning more about the bug.
The panic can be easily triggered by this:
test_udp.c
Description: Binary data
The other thread at that moment is in soclose->sofree->upd_detach->in_pcbfree. It looks for me that we should call in_pcbdrop() in udp_close() to remove inpcb from hashed lists, like it is done for tcp_close(). With this patch I don't observe the panic.
Index: sys/netinet/udp_usrreq.c =================================================================== --- sys/netinet/udp_usrreq.c (revision 225816) +++ sys/netinet/udp_usrreq.c (working copy) @@ -1486,6 +1486,7 @@ udp_close(struct socket *so) inp = sotoinpcb(so); KASSERT(inp != NULL, ("udp_close: inp == NULL")); INP_WLOCK(inp); + in_pcbdrop(inp); if (inp->inp_faddr.s_addr != INADDR_ANY) { INP_HASH_WLOCK(&V_udbinfo); in_pcbdisconnect(inp);
KM> On Mon, Sep 26, 2011 at 4:02 PM, Arnaud Lacombe <lacom...@gmail.com> wrote: >> Hi, >> >> On Mon, Sep 26, 2011 at 5:12 AM, K. Macy <km...@freebsd.org> wrote: >>> >>> >>> On Monday, September 26, 2011, Adrian Chadd <adr...@freebsd.org> wrote: >>>> On 26 September 2011 13:41, Arnaud Lacombe <lacom...@gmail.com> wrote: >>>>> /* >>>>> * XXX >>>>> * This entire block sorely needs a rewrite. >>>>> */ >>>>> if (t && >>>>> ((t->inp_flags & INP_TIMEWAIT) == 0) && >>>>> (so->so_type != SOCK_STREAM || >>>>> ntohl(t->inp_faddr.s_addr) == INADDR_ANY) && >>>>> (ntohl(sin->sin_addr.s_addr) != INADDR_ANY || >>>>> ntohl(t->inp_laddr.s_addr) != INADDR_ANY || >>>>> (t->inp_socket->so_options & >>>>> SO_REUSEPORT) == 0) && >>>>> (inp->inp_cred->cr_uid != >>>>> t->inp_cred->cr_uid)) >>>>> return (EADDRINUSE); >>>>> } >>>>> >>>>> more specifically, `t->inp_socket' is NULL. The top comment may not be >>>>> relevant, as it's been here for the past 8 years. >>>> >>>> Why would t->inp_socket be NULL at this point? >>> >>> TIME_WAIT ... >>> >> on UDP socket ? >> >> - Arnaud >> KM> _______________________________________________ KM> freebsd-net@freebsd.org mailing list KM> http://lists.freebsd.org/mailman/listinfo/freebsd-net KM> To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org" -- Mikolaj Golub
_______________________________________________ freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"