Re: [patch 2/2] [PATCH] qeth: l3 hw tx csum circumvent hw bug

David Miller
2011-01-13T07:47:35Z

From: frank.blaschka@de.ibm.com
Date: Thu, 13 Jan 2011 07:42:25 +0100

> --- a/drivers/s390/net/qeth_l3_main.c
> +++ b/drivers/s390/net/qeth_l3_main.c
> @@ -2998,7 +2998,9 @@ static inline void qeth_l3_hdr_csum(stru
> */
> if (iph->protocol == IPPROTO_UDP)
> hdr->hdr.l3.ext_flags |= QETH_HDR_EXT_UDP;
> - hdr->hdr.l3.ext_flags |= QETH_HDR_EXT_CSUM_TRANSP_REQ;
> + hdr->hdr.l3.ext_flags |= QETH_HDR_EXT_CSUM_TRANSP_REQ |
> + QETH_HDR_EXT_CSUM_HDR_REQ;
> + iph->check = 0;
> if (card->options.performance_stats)
> card->perf_stats.tx_csum++;
> }

You may not change the packet header contents blindly like this.
Otherwise unpredictable contents will be seen by tcpdump and any
other code path which has a clone of this packet.

Thus, you'll need to guard this change with something like:

if (skb_header_cloned(skb) &&
pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) {
dev_kfree_skb(skb);
goto tx_fail;
}

Please fix this and resubmit your two patches.