wok rev 19376

linux: CVE-2016-5696
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sat Aug 13 09:04:52 2016 +0200 (2016-08-13)
parents 5f47ce4a9a34
children 707e4ea3a113
files linux/receipt linux/stuff/linux-CVE-2016-5696.u
line diff
     1.1 --- a/linux/receipt	Fri Aug 12 09:56:34 2016 +0200
     1.2 +++ b/linux/receipt	Sat Aug 13 09:04:52 2016 +0200
     1.3 @@ -224,6 +224,7 @@
     1.4  $PACKAGE-subroot.u
     1.5  $PACKAGE-romfs.u
     1.6  $PACKAGE-hardlinks.u
     1.7 +$PACKAGE-CVE-2016-5696.u
     1.8  aufs3-base.patch
     1.9  aufs3-standalone.patch
    1.10  aufs3-loopback.patch
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/linux/stuff/linux-CVE-2016-5696.u	Sat Aug 13 09:04:52 2016 +0200
     2.3 @@ -0,0 +1,33 @@
     2.4 +http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=75ff39ccc1bd5d3c455b6822ab09e533c551f758
     2.5 +--- linux-3.2.71/net/ipv4/tcp_input.c
     2.6 ++++ linux-3.2.71/net/ipv4/tcp_input.c
     2.7 +@@ -87,7 +87,7 @@
     2.8 + EXPORT_SYMBOL(sysctl_tcp_adv_win_scale);
     2.9 + 
    2.10 + /* rfc5961 challenge ack rate limiting */
    2.11 +-int sysctl_tcp_challenge_ack_limit = 100;
    2.12 ++int sysctl_tcp_challenge_ack_limit = 1000;
    2.13 + 
    2.14 + int sysctl_tcp_stdurg __read_mostly;
    2.15 + int sysctl_tcp_rfc1337 __read_mostly;
    2.16 +@@ -3715,13 +3715,17 @@
    2.17 + 	/* unprotected vars, we dont care of overwrites */
    2.18 + 	static u32 challenge_timestamp;
    2.19 + 	static unsigned int challenge_count;
    2.20 +-	u32 now = jiffies / HZ;
    2.21 ++	u32 count, now = jiffies / HZ;
    2.22 + 
    2.23 + 	if (now != challenge_timestamp) {
    2.24 ++		u32 half = (sysctl_tcp_challenge_ack_limit + 1) >> 1;
    2.25 + 		challenge_timestamp = now;
    2.26 +-		challenge_count = 0;
    2.27 ++		WRITE_ONCE(challenge_count, half +
    2.28 ++			   prandom_u32_max(sysctl_tcp_challenge_ack_limit));
    2.29 + 	}
    2.30 +-	if (++challenge_count <= sysctl_tcp_challenge_ack_limit) {
    2.31 ++	count = READ_ONCE(challenge_count);
    2.32 ++	if (count > 0) {
    2.33 ++		WRITE_ONCE(challenge_count, count - 1);
    2.34 + 		NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPCHALLENGEACK);
    2.35 + 		tcp_send_ack(sk);
    2.36 + 	}