From 083d6b97221df974fb7c678abb95e4abed5abc2d Mon Sep 17 00:00:00 2001 From: Kuniyuki Iwashima Date: Thu, 10 Nov 2022 20:26:12 +0800 Subject: [PATCH] tcp: Fix a data-race around sysctl_tcp_autocorking. stable inclusion from stable-v5.10.135 commit c4e6029a85c8459482284f0edabd1b8fe2909011 category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I5ZWFM Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=c4e6029a85c8459482284f0edabd1b8fe2909011 -------------------------------- [ Upstream commit 85225e6f0a76e6745bc841c9f25169c509b573d8 ] While reading sysctl_tcp_autocorking, it can be changed concurrently. Thus, we need to add READ_ONCE() to its reader. Fixes: f54b311142a9 ("tcp: auto corking") Signed-off-by: Kuniyuki Iwashima Signed-off-by: David S. Miller Signed-off-by: Sasha Levin Signed-off-by: Zheng Zengkai Reviewed-by: Wei Li --- net/ipv4/tcp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 5a55a745a409..f1e6a819502f 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -702,7 +702,7 @@ static bool tcp_should_autocork(struct sock *sk, struct sk_buff *skb, int size_goal) { return skb->len < size_goal && - sock_net(sk)->ipv4.sysctl_tcp_autocorking && + READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_autocorking) && !tcp_rtx_queue_empty(sk) && refcount_read(&sk->sk_wmem_alloc) > skb->truesize; } -- GitLab