From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Eric Dumazet <edumazet@google.com>,
Neal Cardwell <ncardwell@google.com>,
Yuchung Cheng <ycheng@google.com>,
Stephen Hemminger <stephen@networkplumber.org>,
"David S. Miller" <davem@davemloft.net>
Subject: [ 04/19] tcp: cubic: fix overflow error in bictcp_update()
Date: Thu, 12 Sep 2013 10:26:13 -0700 [thread overview]
Message-ID: <20130912172524.646274753@linuxfoundation.org> (raw)
In-Reply-To: <20130912172524.135620246@linuxfoundation.org>
3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <edumazet@google.com>
[ Upstream commit 2ed0edf9090bf4afa2c6fc4f38575a85a80d4b20 ]
commit 17a6e9f1aa9 ("tcp_cubic: fix clock dependency") added an
overflow error in bictcp_update() in following code :
/* change the unit from HZ to bictcp_HZ */
t = ((tcp_time_stamp + msecs_to_jiffies(ca->delay_min>>3) -
ca->epoch_start) << BICTCP_HZ) / HZ;
Because msecs_to_jiffies() being unsigned long, compiler does
implicit type promotion.
We really want to constrain (tcp_time_stamp - ca->epoch_start)
to a signed 32bit value, or else 't' has unexpected high values.
This bugs triggers an increase of retransmit rates ~24 days after
boot [1], as the high order bit of tcp_time_stamp flips.
[1] for hosts with HZ=1000
Big thanks to Van Jacobson for spotting this problem.
Diagnosed-by: Van Jacobson <vanj@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Neal Cardwell <ncardwell@google.com>
Cc: Yuchung Cheng <ycheng@google.com>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/ipv4/tcp_cubic.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
--- a/net/ipv4/tcp_cubic.c
+++ b/net/ipv4/tcp_cubic.c
@@ -204,8 +204,8 @@ static u32 cubic_root(u64 a)
*/
static inline void bictcp_update(struct bictcp *ca, u32 cwnd)
{
- u64 offs;
- u32 delta, t, bic_target, max_cnt;
+ u32 delta, bic_target, max_cnt;
+ u64 offs, t;
ca->ack_cnt++; /* count the number of ACKs */
@@ -248,9 +248,11 @@ static inline void bictcp_update(struct
* if the cwnd < 1 million packets !!!
*/
+ t = (s32)(tcp_time_stamp - ca->epoch_start);
+ t += msecs_to_jiffies(ca->delay_min >> 3);
/* change the unit from HZ to bictcp_HZ */
- t = ((tcp_time_stamp + msecs_to_jiffies(ca->delay_min>>3)
- - ca->epoch_start) << BICTCP_HZ) / HZ;
+ t <<= BICTCP_HZ;
+ do_div(t, HZ);
if (t < ca->bic_K) /* t - K */
offs = ca->bic_K - t;
next prev parent reply other threads:[~2013-09-12 17:26 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-12 17:26 [ 00/19] 3.0.96-stable review Greg Kroah-Hartman
2013-09-12 17:26 ` [ 01/19] htb: fix sign extension bug Greg Kroah-Hartman
2013-09-12 17:26 ` [ 02/19] net: check net.core.somaxconn sysctl values Greg Kroah-Hartman
2013-09-12 17:26 ` [ 03/19] fib_trie: remove potential out of bound access Greg Kroah-Hartman
2013-09-12 17:26 ` Greg Kroah-Hartman [this message]
2013-09-12 17:26 ` [ 05/19] tcp: cubic: fix bug in bictcp_acked() Greg Kroah-Hartman
2013-09-12 17:26 ` [ 06/19] ipv6: dont stop backtracking in fib6_lookup_1 if subtree does not match Greg Kroah-Hartman
2013-09-12 17:26 ` [ 07/19] tun: signedness bug in tun_get_user() Greg Kroah-Hartman
2013-09-12 17:26 ` [ 08/19] ipv6: remove max_addresses check from ipv6_create_tempaddr Greg Kroah-Hartman
2013-09-12 17:26 ` [ 09/19] ipv6: drop packets with multiple fragmentation headers Greg Kroah-Hartman
2013-09-12 17:26 ` [ 10/19] ipv6: Dont depend on per socket memory for neighbour discovery messages Greg Kroah-Hartman
2013-09-12 17:26 ` [ 11/19] net: bridge: convert MLDv2 Query MRC into msecs_to_jiffies for max_delay Greg Kroah-Hartman
2013-09-12 17:26 ` [ 12/19] ICMPv6: treat dest unreachable codes 5 and 6 as EACCES, not EPROTO Greg Kroah-Hartman
2013-09-12 17:26 ` [ 13/19] tipc: fix lockdep warning during bearer initialization Greg Kroah-Hartman
2013-09-12 17:26 ` [ 14/19] PARISC: include <linux/prefetch.h> in drivers/parisc/iommu-helpers.h Greg Kroah-Hartman
2013-09-12 17:26 ` [ 15/19] pci: frv architecture needs generic setup-bus infrastructure Greg Kroah-Hartman
2013-09-12 17:26 ` [ 16/19] m32r: consistently use "suffix-$(...)" Greg Kroah-Hartman
2013-09-12 17:26 ` [ 17/19] m32r: add memcpy() for CONFIG_KERNEL_GZIP=y Greg Kroah-Hartman
2013-09-12 17:26 ` [ 18/19] m32r: make memset() global for CONFIG_KERNEL_BZIP2=y Greg Kroah-Hartman
2013-09-12 17:26 ` [ 19/19] KVM: s390: move kvm_guest_enter,exit closer to sie Greg Kroah-Hartman
2013-09-12 22:29 ` [ 00/19] 3.0.96-stable review Guenter Roeck
2013-09-12 23:07 ` Greg Kroah-Hartman
2013-09-13 23:04 ` Shuah Khan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130912172524.646274753@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=ncardwell@google.com \
--cc=stable@vger.kernel.org \
--cc=stephen@networkplumber.org \
--cc=ycheng@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome