lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 313/846] bpf: Fix SO_RCVBUF/SO_SNDBUF handling in _bpf_setsockopt().
    Date
    From: Kuniyuki Iwashima <kuniyu@amazon.co.jp>

    [ Upstream commit 04c350b1ae6bdb12b84009a4d0bf5ab4e621c47b ]

    The commit 4057765f2dee ("sock: consistent handling of extreme
    SO_SNDBUF/SO_RCVBUF values") added a change to prevent underflow
    in setsockopt() around SO_SNDBUF/SO_RCVBUF.

    This patch adds the same change to _bpf_setsockopt().

    Fixes: 4057765f2dee ("sock: consistent handling of extreme SO_SNDBUF/SO_RCVBUF values")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.co.jp>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20220104013153.97906-2-kuniyu@amazon.co.jp
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/core/filter.c | 2 ++
    1 file changed, 2 insertions(+)

    diff --git a/net/core/filter.c b/net/core/filter.c
    index 1e6831880d1fd..1e43ab413b62e 100644
    --- a/net/core/filter.c
    +++ b/net/core/filter.c
    @@ -4742,12 +4742,14 @@ static int _bpf_setsockopt(struct sock *sk, int level, int optname,
    switch (optname) {
    case SO_RCVBUF:
    val = min_t(u32, val, sysctl_rmem_max);
    + val = min_t(int, val, INT_MAX / 2);
    sk->sk_userlocks |= SOCK_RCVBUF_LOCK;
    WRITE_ONCE(sk->sk_rcvbuf,
    max_t(int, val * 2, SOCK_MIN_RCVBUF));
    break;
    case SO_SNDBUF:
    val = min_t(u32, val, sysctl_wmem_max);
    + val = min_t(int, val, INT_MAX / 2);
    sk->sk_userlocks |= SOCK_SNDBUF_LOCK;
    WRITE_ONCE(sk->sk_sndbuf,
    max_t(int, val * 2, SOCK_MIN_SNDBUF));
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-01-25 00:11    [W:4.029 / U:0.232 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site