lkml.org 
[lkml]   [2016]   [Nov]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 134/346] tcp: consider recv buf for the initial window scale
    3.16.39-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Soheil Hassas Yeganeh <soheil@google.com>

    commit f626300a3e776ccc9671b0dd94698fb3aa315966 upstream.

    tcp_select_initial_window() intends to advertise a window
    scaling for the maximum possible window size. To do so,
    it considers the maximum of net.ipv4.tcp_rmem[2] and
    net.core.rmem_max as the only possible upper-bounds.
    However, users with CAP_NET_ADMIN can use SO_RCVBUFFORCE
    to set the socket's receive buffer size to values
    larger than net.ipv4.tcp_rmem[2] and net.core.rmem_max.
    Thus, SO_RCVBUFFORCE is effectively ignored by
    tcp_select_initial_window().

    To fix this, consider the maximum of net.ipv4.tcp_rmem[2],
    net.core.rmem_max and socket's initial buffer space.

    Fixes: b0573dea1fb3 ("[NET]: Introduce SO_{SND,RCV}BUFFORCE socket options")
    Signed-off-by: Soheil Hassas Yeganeh <soheil@google.com>
    Suggested-by: Neal Cardwell <ncardwell@google.com>
    Acked-by: Neal Cardwell <ncardwell@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    net/ipv4/tcp_output.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    --- a/net/ipv4/tcp_output.c
    +++ b/net/ipv4/tcp_output.c
    @@ -245,7 +245,8 @@ void tcp_select_initial_window(int __spa
    /* Set window scaling on max possible window
    * See RFC1323 for an explanation of the limit to 14
    */
    - space = max_t(u32, sysctl_tcp_rmem[2], sysctl_rmem_max);
    + space = max_t(u32, space, sysctl_tcp_rmem[2]);
    + space = max_t(u32, space, sysctl_rmem_max);
    space = min_t(u32, space, *window_clamp);
    while (space > 65535 && (*rcv_wscale) < 14) {
    space >>= 1;
    \
     
     \ /
      Last update: 2016-11-14 04:03    [W:4.022 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site