Patch "geneve: avoid use-after-free of skb->data" has been added to the 4.8-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
geneve: avoid use-after-free of skb->data
to the 4.8-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
geneve-avoid-use-after-free-of-skb-data.patch
and it can be found in the queue-4.8 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Dec 8 07:19:12 CET 2016
From: Sabrina Dubroca <[email protected]>
Date: Fri, 2 Dec 2016 16:49:29 +0100
Subject: geneve: avoid use-after-free of skb->data
From: Sabrina Dubroca <[email protected]>
[ Upstream commit 5b01014759991887b1e450c9def01e58c02ab81b ]
geneve{,6}_build_skb can end up doing a pskb_expand_head(), which makes the ip_hdr(skb) reference we stashed earlier stale. Since it's only needed as an argument to ip_tunnel_ecn_encap(), move this directly in the function call.
--- drivers/net/geneve.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-)
drivers/net/geneve.c +4 -10
@@ -844,7 +844,6 @@ static netdev_tx_t geneve_xmit_skb(strucstruct geneve_dev *geneve =netdev_priv (dev);struct geneve_sock *gs4 = geneve->sock4;struct rtable *rt =NULL ; -const struct iphdr *iip;/* interior IP header */ int err = -EINVAL ;struct flowi4 fl4;__u8 tos, ttl;
@@ -871,8 +870,6 @@ static netdev_tx_t geneve_xmit_skb(struc sport =udp_flow_src_port (geneve->net, skb,1 ,USHRT_MAX , true);skb_reset_mac_header (skb); - iip =ip_hdr (skb); -if (info) {const struct ip_tunnel_key *key = &info->key;u8 *opts =NULL ;
@@ -892,7 +889,7 @@ static netdev_tx_t geneve_xmit_skb(strucif (unlikely (err)) goto tx_error; - tos =ip_tunnel_ecn_encap (key->tos, iip, skb); + tos =ip_tunnel_ecn_encap (key->tos,ip_hdr (skb), skb); ttl = key->ttl; df = key->tun_flags &TUNNEL_DONT_FRAGMENT ?htons (IP_DF ) :0 ; }else {
@@ -901,7 +898,7 @@ static netdev_tx_t geneve_xmit_skb(strucif (unlikely (err)) goto tx_error; - tos =ip_tunnel_ecn_encap (fl4.flowi4_tos, iip, skb); + tos =ip_tunnel_ecn_encap (fl4.flowi4_tos,ip_hdr (skb), skb); ttl = geneve->ttl;if (!ttl &&IN_MULTICAST (ntohl (fl4.daddr))) ttl =1 ;
@@ -934,7 +931,6 @@ static netdev_tx_t geneve6_xmit_skb(strustruct geneve_dev *geneve =netdev_priv (dev);struct geneve_sock *gs6 = geneve->sock6;struct dst_entry *dst =NULL ; -const struct iphdr *iip;/* interior IP header */ int err = -EINVAL ;struct flowi6 fl6;__u8 prio, ttl;
@@ -959,8 +955,6 @@ static netdev_tx_t geneve6_xmit_skb(stru sport =udp_flow_src_port (geneve->net, skb,1 ,USHRT_MAX , true);skb_reset_mac_header (skb); - iip =ip_hdr (skb); -if (info) {const struct ip_tunnel_key *key = &info->key;u8 *opts =NULL ;
@@ -981,7 +975,7 @@ static netdev_tx_t geneve6_xmit_skb(struif (unlikely (err)) goto tx_error; - prio =ip_tunnel_ecn_encap (key->tos, iip, skb); + prio =ip_tunnel_ecn_encap (key->tos,ip_hdr (skb), skb); ttl = key->ttl; label = info->key.label; }else {
@@ -991,7 +985,7 @@ static netdev_tx_t geneve6_xmit_skb(stru goto tx_error; prio =ip_tunnel_ecn_encap (ip6_tclass (fl6.flowlabel), - iip, skb); +ip_hdr (skb), skb); ttl = geneve->ttl;if (!ttl &&ipv6_addr_is_multicast (&fl6.daddr)) ttl =1 ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.8/geneve-avoid-use-after-free-of-skb-data.patch queue-4.8/rtnetlink-fix-fdb-size-computation.patch