• R
    net: check net.core.somaxconn sysctl values · 5f671d6b
    Roman Gushchin 提交于
    It's possible to assign an invalid value to the net.core.somaxconn
    sysctl variable, because there is no checks at all.
    
    The sk_max_ack_backlog field of the sock structure is defined as
    unsigned short. Therefore, the backlog argument in inet_listen()
    shouldn't exceed USHRT_MAX. The backlog argument in the listen() syscall
    is truncated to the somaxconn value. So, the somaxconn value shouldn't
    exceed 65535 (USHRT_MAX).
    Also, negative values of somaxconn are meaningless.
    
    before:
    $ sysctl -w net.core.somaxconn=256
    net.core.somaxconn = 256
    $ sysctl -w net.core.somaxconn=65536
    net.core.somaxconn = 65536
    $ sysctl -w net.core.somaxconn=-100
    net.core.somaxconn = -100
    
    after:
    $ sysctl -w net.core.somaxconn=256
    net.core.somaxconn = 256
    $ sysctl -w net.core.somaxconn=65536
    error: "Invalid argument" setting key "net.core.somaxconn"
    $ sysctl -w net.core.somaxconn=-100
    error: "Invalid argument" setting key "net.core.somaxconn"
    
    Based on a prior patch from Changli Gao.
    Signed-off-by: NRoman Gushchin <klamm@yandex-team.ru>
    Reported-by: NChangli Gao <xiaosuo@gmail.com>
    Suggested-by: NEric Dumazet <edumazet@google.com>
    Acked-by: NEric Dumazet <edumazet@google.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    5f671d6b
sysctl_net_core.c 8.7 KB