• Roman Gushchin's avatar
    net: check net.core.somaxconn sysctl values · 5f671d6b
    Roman Gushchin authored
    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: default avatarRoman Gushchin <klamm@yandex-team.ru>
    Reported-by: default avatarChangli Gao <xiaosuo@gmail.com>
    Suggested-by: default avatarEric Dumazet <edumazet@google.com>
    Acked-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    5f671d6b
sysctl_net_core.c 8.71 KB