Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 Sep 2008 07:05:29 -0300
From:      Mario Sergio Fujikawa Ferreira <lioux-list@uol.com.br>
To:        Robert Watson <rwatson@FreeBSD.org>
Cc:        Norbert Papke <fbsd-ml@scrapper.ca>, stable@FreeBSD.org
Subject:   Re: Possible UDP deadlock/panic fix
Message-ID:  <48D8BF69.6060206@uol.com.br>
In-Reply-To: <alpine.BSF.1.10.0809220937320.58772@fledge.watson.org> (sfid-20080922_05543_31152F2E)
References:  <alpine.BSF.1.10.0809220937320.58772@fledge.watson.org> (sfid-20080922_05543_31152F2E)

next in thread | previous in thread | raw e-mail | index | archive | help
Hi,

     That seems to be working. I've been up and running for 7 hours now 
with your patch.

     The machine is a bit slow but I have both WITNESS and INVARIANTS 
enabled so as to make sure everything is fine.

     Rergads,
         Mario

Robert Watson wrote:
> 
> Attached is an MFC candidate for a patch I just merged to 8.x, which 
> corrects the UDP lock recursion issue both of you were running into.  If 
> it settles well for a couple of days in HEAD then I'll go ahead and 
> request an MFC from re@, but your confirmation as to whether or not this 
> corrects the specific symptoms you are seeing would be very helpful.  I 
> was able to confirm that it eliminated what appeared to be the same 
> problem here when I attempted to reproduce it based on the information 
> you provided, so I'm hopeful.\
> 
> Thanks,
> 
> Robert N M Watson
> Computer Laboratory
> University of Cambridge
> 
> 
> Property changes on: .
> ___________________________________________________________________
> Modified: svn:mergeinfo
>    Merged /head/sys:r183265
> 
> Index: netinet6/udp6_usrreq.c
> ===================================================================
> --- netinet6/udp6_usrreq.c    (revision 183265)
> +++ netinet6/udp6_usrreq.c    (working copy)
> @@ -975,13 +975,23 @@
>                  error = EINVAL;
>                  goto out;
>              }
> +
> +            /*
> +             * XXXRW: We release UDP-layer locks before calling
> +             * udp_send() in order to avoid recursion.  However,
> +             * this does mean there is a short window where inp's
> +             * fields are unstable.  Could this lead to a
> +             * potential race in which the factors causing us to
> +             * select the UDPv4 output routine are invalidated?
> +             */
> +            INP_WUNLOCK(inp);
> +            INP_INFO_WUNLOCK(&udbinfo);
>              if (sin6)
>                  in6_sin6_2_sin_in_sock(addr);
>              pru = inetsw[ip_protox[IPPROTO_UDP]].pr_usrreqs;
> -            error = ((*pru->pru_send)(so, flags, m, addr, control,
> +            /* addr will just be freed in sendit(). */
> +            return ((*pru->pru_send)(so, flags, m, addr, control,
>                  td));
> -            /* addr will just be freed in sendit(). */
> -            goto out;
>          }
>      }
>  #endif
> _______________________________________________
> freebsd-stable@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-stable
> To unsubscribe, send any mail to "freebsd-stable-unsubscribe@freebsd.org"
> 




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?48D8BF69.6060206>