| From a0f9ece12b1ed7b9dee8b5860aeaf0add3a1a023 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 6 Jul 2022 16:40:00 -0700 |
| Subject: net: Fix data-races around sysctl_mem. |
| |
| From: Kuniyuki Iwashima <kuniyu@amazon.com> |
| |
| [ Upstream commit 310731e2f1611d1d13aae237abcf8e66d33345d5 ] |
| |
| While reading .sysctl_mem, it can be changed concurrently. |
| So, we need to add READ_ONCE() to avoid data-races. |
| |
| Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") |
| Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| include/net/sock.h | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/include/net/sock.h b/include/net/sock.h |
| index 7d49196a3880..96f51d4b1649 100644 |
| --- a/include/net/sock.h |
| +++ b/include/net/sock.h |
| @@ -1484,7 +1484,7 @@ void __sk_mem_reclaim(struct sock *sk, int amount); |
| /* sysctl_mem values are in pages, we convert them in SK_MEM_QUANTUM units */ |
| static inline long sk_prot_mem_limits(const struct sock *sk, int index) |
| { |
| - long val = sk->sk_prot->sysctl_mem[index]; |
| + long val = READ_ONCE(sk->sk_prot->sysctl_mem[index]); |
| |
| #if PAGE_SIZE > SK_MEM_QUANTUM |
| val <<= PAGE_SHIFT - SK_MEM_QUANTUM_SHIFT; |
| -- |
| 2.35.1 |
| |