tcp: Stop non-TSO packets morphing into TSO
If a socket starts out on a non-TSO route, and then switches to a TSO route, then the tail on the tx queue can morph into a TSO packet, causing mischief because the rest of the stack does not expect a partially linear TSO packet. This patch fixes this by ensuring that skb->ip_summed is set to CHECKSUM_PARTIAL before declaring a packet as TSO. Reported-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9c0346bd08
commit
8e5b9dda99
@ -725,7 +725,8 @@ static void tcp_queue_skb(struct sock *sk, struct sk_buff *skb)
|
|||||||
static void tcp_set_skb_tso_segs(struct sock *sk, struct sk_buff *skb,
|
static void tcp_set_skb_tso_segs(struct sock *sk, struct sk_buff *skb,
|
||||||
unsigned int mss_now)
|
unsigned int mss_now)
|
||||||
{
|
{
|
||||||
if (skb->len <= mss_now || !sk_can_gso(sk)) {
|
if (skb->len <= mss_now || !sk_can_gso(sk) ||
|
||||||
|
skb->ip_summed == CHECKSUM_NONE) {
|
||||||
/* Avoid the costly divide in the normal
|
/* Avoid the costly divide in the normal
|
||||||
* non-TSO case.
|
* non-TSO case.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user