diff options
author | David S. Miller <davem@nuts.davemloft.net> | 2004-07-22 00:01:38 -0700 |
---|---|---|
committer | David S. Miller <davem@nuts.davemloft.net> | 2004-07-22 00:01:38 -0700 |
commit | 02bc27cb2a867d11d8551389df0481d7d2ec83f7 (patch) | |
tree | 1e9d1beadbb302782da7e046e9b357496796a01f /net | |
parent | c5de793d22c938557bcfe0d42e3c1ef568807e09 (diff) | |
download | history-02bc27cb2a867d11d8551389df0481d7d2ec83f7.tar.gz |
[TCP]: Do not overflow 16-bit window field in tcp_select_window().
Signed-off-by: David S. Miller <davem@redhat.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv4/tcp_output.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 292dc9fc0b6d9b..68ab99fc037019 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -168,6 +168,14 @@ static __inline__ u16 tcp_select_window(struct sock *sk) tp->rcv_wnd = new_win; tp->rcv_wup = tp->rcv_nxt; + /* Make sure we do not exceed the maximum possible + * scaled window. + */ + if (!tp->rcv_wscale) + new_win = min(new_win, MAX_TCP_WINDOW); + else + new_win = min(new_win, (65535U << tp->rcv_wscale)); + /* RFC1323 scaling applied */ new_win >>= tp->rcv_wscale; |