Patch "udp: disallow UFO for sockets with SO_NO_CHECK option" has been added to the 4.3-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
udp: disallow UFO for sockets with SO_NO_CHECK option
to the 4.3-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:
udp-disallow-ufo-for-sockets-with-so_no_check-option.patch
and it can be found in the queue-4.3 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 Tue Jan 26 21:35:03 PST 2016
From: =?UTF-8?q?Michal=20Kube=C4=8Dek?= <[email protected]>
Date: Mon, 11 Jan 2016 07:50:30 +0100
Subject: udp: disallow UFO for sockets with SO_NO_CHECK option
From: =?UTF-8?q?Michal=20Kube=C4=8Dek?= <[email protected]>
[ Upstream commit 40ba330227ad00b8c0cdf2f425736ff9549cc423 ]
Commit acf8dd0a9d0b ("udp: only allow UFO for packets from SOCK_DGRAM sockets") disallows UFO for packets sent from raw sockets. We need to do the same also for SOCK_DGRAM sockets with SO_NO_CHECK options, even if for a bit different reason: while such socket would override the CHECKSUM_PARTIAL set by ip_ufo_append_data(), gso_size is still set and bad offloading flags warning is triggered in __skb_gso_segment().
In the IPv6 case, SO_NO_CHECK option is ignored but we need to disallow UFO for packets sent by sockets with UDP_NO_CHECK6_TX option.
--- net/ipv4/ip_output.c | 2 +- net/ipv6/ip6_output.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
net/ipv4/ip_output.c +1 -1
@@ -918,7 +918,7 @@ static int __ip_append_data(struct sockif (((length > mtu) || (skb &&skb_is_gso (skb))) && (sk->sk_protocol ==IPPROTO_UDP ) && (rt->dst.dev->features &NETIF_F_UFO ) && !rt->dst.header_len && - (sk->sk_type ==SOCK_DGRAM )) { + (sk->sk_type ==SOCK_DGRAM ) && !sk->sk_no_check_tx) { err =ip_ufo_append_data (sk, queue, getfrag, from, length, hh_len, fragheaderlen, transhdrlen, maxfraglen, flags);
net/ipv6/ip6_output.c +1 -1
@@ -1345,7 +1345,7 @@ emsgsize: (skb && skb_is_gso(skb))) && (sk->sk_protocol == IPPROTO_UDP) && (rt->dst.dev->features & NETIF_F_UFO) && - (sk->sk_type == SOCK_DGRAM)) { + (sk->sk_type == SOCK_DGRAM) && !udp_get_no_check6_tx(sk)) { err =ip6_ufo_append_data (sk, queue, getfrag, from, length, hh_len, fragheaderlen, transhdrlen, mtu, flags, fl6);
Patches currently in stable-queue which might be from [email protected] are
queue-4.3/udp-disallow-ufo-for-sockets-with-so_no_check-option.patch