[PATCH net] rxrpc: Call state should be read with READ_ONCE() under some circumstances

Subsystems: networking [general], rxrpc sockets (af_rxrpc), the rest

STALE2035d LANDED

Landed in mainline as a95d25dd7b94 on 2021-01-13.

4 messages, 2 authors, 2021-01-13 · open the first message on its own page

[PATCH net] rxrpc: Call state should be read with READ_ONCE() under some circumstances

From: David Howells <dhowells@redhat.com>
Date: 2021-01-12 16:01:19

From: Baptiste Lepers <redacted>

The call state may be changed at any time by the data-ready routine in
response to received packets, so if the call state is to be read and acted
upon several times in a function, READ_ONCE() must be used unless the call
state lock is held.

As it happens, we used READ_ONCE() to read the state a few lines above the
unmarked read in rxrpc_input_data(), so use that value rather than
re-reading it.

Signed-off-by: Baptiste Lepers <redacted>
Signed-off-by: David Howells <dhowells@redhat.com>
---

 net/rxrpc/input.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/rxrpc/input.c b/net/rxrpc/input.c
index 667c44aa5a63..dc201363f2c4 100644
--- a/net/rxrpc/input.c
+++ b/net/rxrpc/input.c
@@ -430,7 +430,7 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb)
 		return;
 	}
 
-	if (call->state == RXRPC_CALL_SERVER_RECV_REQUEST) {
+	if (state == RXRPC_CALL_SERVER_RECV_REQUEST) {
 		unsigned long timo = READ_ONCE(call->next_req_timo);
 		unsigned long now, expect_req_by;
 

Re: [PATCH net] rxrpc: Call state should be read with READ_ONCE() under some circumstances

From: Jakub Kicinski <kuba@kernel.org>
Date: 2021-01-13 02:26:32

On Tue, 12 Jan 2021 15:59:15 +0000 David Howells wrote:
From: Baptiste Lepers <redacted>

The call state may be changed at any time by the data-ready routine in
response to received packets, so if the call state is to be read and acted
upon several times in a function, READ_ONCE() must be used unless the call
state lock is held.

As it happens, we used READ_ONCE() to read the state a few lines above the
unmarked read in rxrpc_input_data(), so use that value rather than
re-reading it.

Signed-off-by: Baptiste Lepers <redacted>
Signed-off-by: David Howells <dhowells@redhat.com>
Fixes: a158bdd3247b ("rxrpc: Fix call timeouts")

maybe?
quoted hunk
diff --git a/net/rxrpc/input.c b/net/rxrpc/input.c
index 667c44aa5a63..dc201363f2c4 100644
--- a/net/rxrpc/input.c
+++ b/net/rxrpc/input.c
@@ -430,7 +430,7 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb)
 		return;
 	}
 
-	if (call->state == RXRPC_CALL_SERVER_RECV_REQUEST) {
+	if (state == RXRPC_CALL_SERVER_RECV_REQUEST) {
 		unsigned long timo = READ_ONCE(call->next_req_timo);
 		unsigned long now, expect_req_by;
 

Re: [PATCH net] rxrpc: Call state should be read with READ_ONCE() under some circumstances

From: David Howells <dhowells@redhat.com>
Date: 2021-01-13 08:25:43

Jakub Kicinski [off-list ref] wrote:
On Tue, 12 Jan 2021 15:59:15 +0000 David Howells wrote:
quoted
From: Baptiste Lepers <redacted>

The call state may be changed at any time by the data-ready routine in
response to received packets, so if the call state is to be read and acted
upon several times in a function, READ_ONCE() must be used unless the call
state lock is held.

As it happens, we used READ_ONCE() to read the state a few lines above the
unmarked read in rxrpc_input_data(), so use that value rather than
re-reading it.

Signed-off-by: Baptiste Lepers <redacted>
Signed-off-by: David Howells <dhowells@redhat.com>
Fixes: a158bdd3247b ("rxrpc: Fix call timeouts")

maybe?
Ah, yes.  I missed there wasn't a Fixes line.  Can you add that one in, or do
I need to resubmit the patch?

David

Re: [PATCH net] rxrpc: Call state should be read with READ_ONCE() under some circumstances

From: Jakub Kicinski <kuba@kernel.org>
Date: 2021-01-13 18:42:42

On Wed, 13 Jan 2021 08:23:54 +0000 David Howells wrote:
Jakub Kicinski [off-list ref] wrote:
quoted
On Tue, 12 Jan 2021 15:59:15 +0000 David Howells wrote:  
quoted
From: Baptiste Lepers <redacted>

The call state may be changed at any time by the data-ready routine in
response to received packets, so if the call state is to be read and acted
upon several times in a function, READ_ONCE() must be used unless the call
state lock is held.

As it happens, we used READ_ONCE() to read the state a few lines above the
unmarked read in rxrpc_input_data(), so use that value rather than
re-reading it.

Signed-off-by: Baptiste Lepers <redacted>
Signed-off-by: David Howells <dhowells@redhat.com>  
Fixes: a158bdd3247b ("rxrpc: Fix call timeouts")

maybe?  
Ah, yes.  I missed there wasn't a Fixes line.  Can you add that one in, or do
I need to resubmit the patch?
Sure, added, just checking if you didn't leave it out on purpose.

Applied, thanks!
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help