From 57710e29c7775ac1c82bf0887fd2b050d02f185b Mon Sep 17 00:00:00 2001 From: Kuniyuki Iwashima Date: Wed, 2 Nov 2022 15:33:35 +0800 Subject: [PATCH] net: Fix data-races around sysctl_mem. stable inclusion from stable-v5.10.132 commit f5811b8df2b97abb2a0c8936cdbdc4dc4457a9c2 category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I5YS3T Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=f5811b8df2b97abb2a0c8936cdbdc4dc4457a9c2 -------------------------------- [ 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 Signed-off-by: David S. Miller Signed-off-by: Sasha Levin Signed-off-by: Zheng Zengkai Acked-by: Xie XiuQi --- 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 10668d5e38e9..643f1c87ab3c 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -1468,7 +1468,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; -- GitLab