Commit 36a8f39e authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller

net: skb_is_gso_v6() requires skb_is_gso()

bnx2x makes a dangerous use of skb_is_gso_v6().

It should first make sure skb is a gso packet
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Cc: Eilon Greenstein <eilong@broadcom.com>
Acked-by: default avatarDmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c3f40d7c
...@@ -3256,14 +3256,16 @@ static u32 bnx2x_xmit_type(struct bnx2x *bp, struct sk_buff *skb) ...@@ -3256,14 +3256,16 @@ static u32 bnx2x_xmit_type(struct bnx2x *bp, struct sk_buff *skb)
if (prot == IPPROTO_TCP) if (prot == IPPROTO_TCP)
rc |= XMIT_CSUM_TCP; rc |= XMIT_CSUM_TCP;
if (skb_is_gso_v6(skb)) { if (skb_is_gso(skb)) {
rc |= (XMIT_GSO_V6 | XMIT_CSUM_TCP); if (skb_is_gso_v6(skb)) {
if (rc & XMIT_CSUM_ENC) rc |= (XMIT_GSO_V6 | XMIT_CSUM_TCP);
rc |= XMIT_GSO_ENC_V6; if (rc & XMIT_CSUM_ENC)
} else if (skb_is_gso(skb)) { rc |= XMIT_GSO_ENC_V6;
rc |= (XMIT_GSO_V4 | XMIT_CSUM_TCP); } else {
if (rc & XMIT_CSUM_ENC) rc |= (XMIT_GSO_V4 | XMIT_CSUM_TCP);
rc |= XMIT_GSO_ENC_V4; if (rc & XMIT_CSUM_ENC)
rc |= XMIT_GSO_ENC_V4;
}
} }
return rc; return rc;
......
...@@ -2755,6 +2755,7 @@ static inline bool skb_is_gso(const struct sk_buff *skb) ...@@ -2755,6 +2755,7 @@ static inline bool skb_is_gso(const struct sk_buff *skb)
return skb_shinfo(skb)->gso_size; return skb_shinfo(skb)->gso_size;
} }
/* Note: Should be called only if skb_is_gso(skb) is true */
static inline bool skb_is_gso_v6(const struct sk_buff *skb) static inline bool skb_is_gso_v6(const struct sk_buff *skb)
{ {
return skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6; return skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment