summaryrefslogtreecommitdiff
path: root/net/dccp/ccids/ccid2.c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@google.com>2018-08-22 08:08:40 +0200
committerGreg Kroah-Hartman <gregkh@google.com>2018-08-22 08:08:40 +0200
commite917467d978603bafcb18c7f73a72b0b588e619e (patch)
tree24212a56516a5235102a03851f268c5e7c88a7d7 /net/dccp/ccids/ccid2.c
parent5541782ce2bba0a5ac75f564e8f74e40b831d6b9 (diff)
parent78f654f6cce3442937b8c7eb4b640357871363c1 (diff)
Merge 4.4.151 into android-4.4
Changes in 4.4.151 dccp: fix undefined behavior with 'cwnd' shift in ccid2_cwnd_restart() l2tp: use sk_dst_check() to avoid race on sk->sk_dst_cache llc: use refcount_inc_not_zero() for llc_sap_find() net_sched: Fix missing res info when create new tc_index filter vsock: split dwork to avoid reinitializations net_sched: fix NULL pointer dereference when delete tcindex filter ALSA: hda - Sleep for 10ms after entering D3 on Conexant codecs ALSA: hda - Turn CX8200 into D3 as well upon reboot ALSA: vx222: Fix invalid endian conversions ALSA: virmidi: Fix too long output trigger loop ALSA: cs5535audio: Fix invalid endian conversion ALSA: hda: Correct Asrock B85M-ITX power_save blacklist entry ALSA: memalloc: Don't exceed over the requested size ALSA: vxpocket: Fix invalid endian conversions USB: serial: sierra: fix potential deadlock at close USB: option: add support for DW5821e ACPI: save NVS memory for Lenovo G50-45 ACPI / PM: save NVS memory for ASUS 1025C laptop serial: 8250_dw: always set baud rate in dw8250_set_termios x86/mm: Simplify p[g4um]d_page() macros Bluetooth: avoid killing an already killed socket isdn: Disable IIOCDBGVAR Linux 4.4.151 Change-Id: I717cee04f3c1a5c7fbacf696e0a5c32ca67aedf8 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'net/dccp/ccids/ccid2.c')
-rw-r--r--net/dccp/ccids/ccid2.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/net/dccp/ccids/ccid2.c b/net/dccp/ccids/ccid2.c
index 86a2ed0fb219..161dfcf86126 100644
--- a/net/dccp/ccids/ccid2.c
+++ b/net/dccp/ccids/ccid2.c
@@ -228,14 +228,16 @@ static void ccid2_cwnd_restart(struct sock *sk, const u32 now)
struct ccid2_hc_tx_sock *hc = ccid2_hc_tx_sk(sk);
u32 cwnd = hc->tx_cwnd, restart_cwnd,
iwnd = rfc3390_bytes_to_packets(dccp_sk(sk)->dccps_mss_cache);
+ s32 delta = now - hc->tx_lsndtime;
hc->tx_ssthresh = max(hc->tx_ssthresh, (cwnd >> 1) + (cwnd >> 2));
/* don't reduce cwnd below the initial window (IW) */
restart_cwnd = min(cwnd, iwnd);
- cwnd >>= (now - hc->tx_lsndtime) / hc->tx_rto;
- hc->tx_cwnd = max(cwnd, restart_cwnd);
+ while ((delta -= hc->tx_rto) >= 0 && cwnd > restart_cwnd)
+ cwnd >>= 1;
+ hc->tx_cwnd = max(cwnd, restart_cwnd);
hc->tx_cwnd_stamp = now;
hc->tx_cwnd_used = 0;