diff options
author | Kuniyuki Iwashima <kuniyu@amazon.co.jp> | 2022-01-04 10:31:48 +0900 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2022-01-05 14:15:42 -0800 |
commit | 04c350b1ae6bdb12b84009a4d0bf5ab4e621c47b (patch) | |
tree | 6cde31e1e89f7e4d8b7e8e6e2017c0d59a58b494 /net/core | |
parent | a5bebc4f00dee47113eed48098c68e88b5ba70e8 (diff) | |
download | linux-stable-04c350b1ae6bdb12b84009a4d0bf5ab4e621c47b.tar.gz linux-stable-04c350b1ae6bdb12b84009a4d0bf5ab4e621c47b.tar.bz2 linux-stable-04c350b1ae6bdb12b84009a4d0bf5ab4e621c47b.zip |
bpf: Fix SO_RCVBUF/SO_SNDBUF handling in _bpf_setsockopt().
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
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/filter.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/net/core/filter.c b/net/core/filter.c index 606ab5a98a1a..368fe28c8dc6 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -4741,12 +4741,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)); |