| From foo@baz Fri Nov 7 11:36:50 PST 2014 |
| From: Li RongQing <roy.qing.li@gmail.com> |
| Date: Thu, 16 Oct 2014 09:17:18 +0800 |
| Subject: vxlan: using pskb_may_pull as early as possible |
| |
| From: Li RongQing <roy.qing.li@gmail.com> |
| |
| [ Upstream commit 91269e390d062b526432f2ef1352b8df82e0e0bc ] |
| |
| pskb_may_pull should be used to check if skb->data has enough space, |
| skb->len can not ensure that. |
| |
| Cc: Cong Wang <xiyou.wangcong@gmail.com> |
| Signed-off-by: Li RongQing <roy.qing.li@gmail.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/vxlan.c | 6 ++---- |
| 1 file changed, 2 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/net/vxlan.c |
| +++ b/drivers/net/vxlan.c |
| @@ -1440,9 +1440,6 @@ static int neigh_reduce(struct net_devic |
| if (!in6_dev) |
| goto out; |
| |
| - if (!pskb_may_pull(skb, skb->len)) |
| - goto out; |
| - |
| iphdr = ipv6_hdr(skb); |
| saddr = &iphdr->saddr; |
| daddr = &iphdr->daddr; |
| @@ -1929,7 +1926,8 @@ static netdev_tx_t vxlan_xmit(struct sk_ |
| return arp_reduce(dev, skb); |
| #if IS_ENABLED(CONFIG_IPV6) |
| else if (ntohs(eth->h_proto) == ETH_P_IPV6 && |
| - skb->len >= sizeof(struct ipv6hdr) + sizeof(struct nd_msg) && |
| + pskb_may_pull(skb, sizeof(struct ipv6hdr) |
| + + sizeof(struct nd_msg)) && |
| ipv6_hdr(skb)->nexthdr == IPPROTO_ICMPV6) { |
| struct nd_msg *msg; |
| |