lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 15 Jun 2010 15:15:30 +0300
From:	"Michael S. Tsirkin" <mst@...hat.com>
To:	Herbert Xu <herbert@...dor.hengli.com.au>
Cc:	"David S. Miller" <davem@...emloft.net>, netdev@...r.kernel.org
Subject: Re: udp: Fix bogus UFO packet generation

On Tue, Jun 15, 2010 at 09:52:25PM +1000, Herbert Xu wrote:
> Hi:
> 
> udp: Fix bogus UFO packet generation
> 
> It has been reported that the new UFO software fallback path
> fails under certain conditions with NFS.  I tracked the problem
> down to the generation of UFO packets that are smaller than the
> MTU.  The software fallback path simply discards these packets.
> 
> This patch fixes the problem by not generating such packets on
> the UFO path.
> 
> Signed-off-by: Herbert Xu <herbert@...dor.apana.org.au>

FWIW
Reviewed-by: Michael S. Tsirkin <mst@...hat.com>


> diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
> index 9a4a6c9..041d41d 100644
> --- a/net/ipv4/ip_output.c
> +++ b/net/ipv4/ip_output.c
> @@ -873,8 +873,10 @@ int ip_append_data(struct sock *sk,
>  	    !exthdrlen)
>  		csummode = CHECKSUM_PARTIAL;
>  
> +	skb = skb_peek_tail(&sk->sk_write_queue);
> +
>  	inet->cork.length += length;
> -	if (((length> mtu) || !skb_queue_empty(&sk->sk_write_queue)) &&
> +	if (((length > mtu) || (skb && skb_is_gso(skb))) &&
>  	    (sk->sk_protocol == IPPROTO_UDP) &&
>  	    (rt->u.dst.dev->features & NETIF_F_UFO)) {
>  		err = ip_ufo_append_data(sk, getfrag, from, length, hh_len,
> @@ -892,7 +894,7 @@ int ip_append_data(struct sock *sk,
>  	 * adding appropriate IP header.
>  	 */
>  
> -	if ((skb = skb_peek_tail(&sk->sk_write_queue)) == NULL)
> +	if (!skb)
>  		goto alloc_new_skb;
>  
>  	while (length > 0) {
> @@ -1121,7 +1123,8 @@ ssize_t	ip_append_page(struct sock *sk, struct page *page,
>  		return -EINVAL;
>  
>  	inet->cork.length += size;
> -	if ((sk->sk_protocol == IPPROTO_UDP) &&
> +	if ((size + skb->len > mtu) &&
> +	    (sk->sk_protocol == IPPROTO_UDP) &&
>  	    (rt->u.dst.dev->features & NETIF_F_UFO)) {
>  		skb_shinfo(skb)->gso_size = mtu - fragheaderlen;
>  		skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
> 
> Cheers,
> -- 
> Visit Openswan at http://www.openswan.org/
> Email: Herbert Xu ~{PmV>HI~} <herbert@...dor.apana.org.au>
> Home Page: http://gondor.apana.org.au/~herbert/
> PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@...r.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ