All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brian King <brking@linux.vnet.ibm.com>
To: Santiago Leon <santil@us.ibm.com>
Cc: jeff@garzik.org, netdev@vger.kernel.org
Subject: Re: [PATCH] ibmveth: fix bad UDP checksums
Date: Thu, 21 Aug 2008 14:41:07 -0500	[thread overview]
Message-ID: <48ADC4D3.4000201@linux.vnet.ibm.com> (raw)
In-Reply-To: <20080820190826.24896.41095.62294@soporte.mitelefono.ec>

Acked by: Brian King <brking@linux.vnet.ibm.com>

Santiago Leon wrote:
> This patch fixes a ibmveth bug where bad UDP checksums are being transmitted 
> when checksum offloading is enabled.
> The hypervisor does checksum offloading only on TCP packets, so ibmveth calls 
> skb_checksum_help() for any other protocol.  The bug happens because 
> the packet is being modified after the DMA map, so we would need a memory 
> barrier before making the hypervisor call.  Reordering the code so that the 
> DMA map happens after skb_checksum_help() has the additional advantage of 
> fixing a DMA map leak if skb_checksum_help() where to fail.
> 
> Please consider applying.
> 
> Signed-off-by: Santiago Leon <santil@us.ibm.com>
> ---
> 
>  ibmveth.c |    5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> --- a/drivers/net/ibmveth.c	2008-08-19 07:31:29.000000000 -0400
> +++ b/drivers/net/ibmveth.c	2008-08-19 07:46:24.000000000 -0400
> @@ -904,8 +904,6 @@ static int ibmveth_start_xmit(struct sk_
>  	unsigned long data_dma_addr;
> 
>  	desc.fields.flags_len = IBMVETH_BUF_VALID | skb->len;
> -	data_dma_addr = dma_map_single(&adapter->vdev->dev, skb->data,
> -				       skb->len, DMA_TO_DEVICE);
> 
>  	if (skb->ip_summed == CHECKSUM_PARTIAL &&
>  	    ip_hdr(skb)->protocol != IPPROTO_TCP && skb_checksum_help(skb)) {
> @@ -924,6 +922,8 @@ static int ibmveth_start_xmit(struct sk_
>  		buf[1] = 0;
>  	}
> 
> +	data_dma_addr = dma_map_single(&adapter->vdev->dev, skb->data,
> +				       skb->len, DMA_TO_DEVICE);
>  	if (dma_mapping_error(&adapter->vdev->dev, data_dma_addr)) {
>  		if (!firmware_has_feature(FW_FEATURE_CMO))
>  			ibmveth_error_printk("tx: unable to map xmit buffer\n");
> @@ -932,6 +932,7 @@ static int ibmveth_start_xmit(struct sk_
>  		desc.fields.address = adapter->bounce_buffer_dma;
>  		tx_map_failed++;
>  		used_bounce = 1;
> +		wmb();
>  	} else
>  		desc.fields.address = data_dma_addr;
> 
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


-- 
Brian King
Linux on Power Virtualization
IBM Linux Technology Center



  reply	other threads:[~2008-08-21 19:42 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-20 19:09 [PATCH] ibmveth: fix bad UDP checksums Santiago Leon
2008-08-21 19:41 ` Brian King [this message]
2008-08-27  9:37 ` Jeff Garzik

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=48ADC4D3.4000201@linux.vnet.ibm.com \
    --to=brking@linux.vnet.ibm.com \
    --cc=jeff@garzik.org \
    --cc=netdev@vger.kernel.org \
    --cc=santil@us.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.