Message ID | 20210107051434.12395-1-baptiste.lepers@gmail.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | rxrpc: Call state should be read with READ_ONCE() under some circumstances | expand |
Context | Check | Description |
---|---|---|
netdev/cover_letter | success | Link |
netdev/fixes_present | success | Link |
netdev/patch_count | success | Link |
netdev/tree_selection | success | Guessed tree name to be net-next |
netdev/subject_prefix | warning | Target tree name not specified in the subject |
netdev/cc_maintainers | success | CCed 5 of 5 maintainers |
netdev/source_inline | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Link |
netdev/module_param | success | Was 0 now: 0 |
netdev/build_32bit | success | Errors and warnings before: 0 this patch: 0 |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/verify_fixes | success | Link |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 8 lines checked |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 0 this patch: 0 |
netdev/header_inline | success | Link |
netdev/stable | success | Stable not CCed |
Baptiste Lepers <baptiste.lepers@gmail.com> wrote: > 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. I'm going to add: 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. to the commit message, if that's okay by you. David
Yes, that's fine with me. Thanks for the clarification of the commit message. (Sorry for the double send, I forgot to enable plain text on my previous answer.) Baptiste. On Thu, Jan 7, 2021 at 10:05 PM David Howells <dhowells@redhat.com> wrote: > > Baptiste Lepers <baptiste.lepers@gmail.com> wrote: > > > 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. > > I'm going to add: > > 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. > > to the commit message, if that's okay by you. > > David >
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;
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. Signed-off-by: Baptiste Lepers <baptiste.lepers@gmail.com> --- net/rxrpc/input.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)