[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20210819143447.314539-1-chouhan.shreyansh630@gmail.com>
Date: Thu, 19 Aug 2021 20:04:47 +0530
From: Shreyansh Chouhan <chouhan.shreyansh630@...il.com>
To: davem@...emloft.net, yoshfuji@...ux-ipv6.org, dsahern@...nel.org,
kuba@...nel.org, willemdebruijn.kernel@...il.com
Cc: Shreyansh Chouhan <chouhan.shreyansh630@...il.com>,
netdev@...r.kernel.org, linux-kernel@...r.kernel.org,
syzbot+ff8e1b9f2f36481e2efc@...kaller.appspotmail.com
Subject: [PATCH] ip_gre/ip6_gre: add check for invalid csum_start
If we get a ip gre packet with TUNNEL_CSUM set, an invalid csum_start
value causes skb->csum_start offset to be less than the offset for
skb->data after we pull the ip header from the packet during the
ipgre_xmit call.
This patch adds a sanity check to gre_handle_offloads, which checks the
validity of skb->csum_start after we have pulled the ip header from the
packet in the ipgre_xmit call.
Reported-by: syzbot+ff8e1b9f2f36481e2efc@...kaller.appspotmail.com
Signed-off-by: Shreyansh Chouhan <chouhan.shreyansh630@...il.com>
---
net/ipv4/ip_gre.c | 2 ++
net/ipv6/ip6_gre.c | 2 ++
2 files changed, 4 insertions(+)
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
index 12dca0c85f3c..95419b7adf5c 100644
--- a/net/ipv4/ip_gre.c
+++ b/net/ipv4/ip_gre.c
@@ -473,6 +473,8 @@ static void __gre_xmit(struct sk_buff *skb, struct net_device *dev,
static int gre_handle_offloads(struct sk_buff *skb, bool csum)
{
+ if (csum && skb_checksum_start(skb) < skb->data)
+ return -EINVAL;
return iptunnel_handle_offloads(skb, csum ? SKB_GSO_GRE_CSUM : SKB_GSO_GRE);
}
diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
index bc224f917bbd..7a5e90e09363 100644
--- a/net/ipv6/ip6_gre.c
+++ b/net/ipv6/ip6_gre.c
@@ -629,6 +629,8 @@ static int gre_rcv(struct sk_buff *skb)
static int gre_handle_offloads(struct sk_buff *skb, bool csum)
{
+ if (csum && skb_checksum_start(skb) < skb->data)
+ return -EINVAL;
return iptunnel_handle_offloads(skb,
csum ? SKB_GSO_GRE_CSUM : SKB_GSO_GRE);
}
--
2.31.1
Powered by blists - more mailing lists