| From c10f252af3f01e30f2ee3a86fe96dea21f81e967 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 1 Oct 2020 11:57:40 +0100 |
| Subject: rxrpc: Fix some missing _bh annotations on locking conn->state_lock |
| |
| From: David Howells <dhowells@redhat.com> |
| |
| [ Upstream commit fa1d113a0f96f9ab7e4fe4f8825753ba1e34a9d3 ] |
| |
| conn->state_lock may be taken in softirq mode, but a previous patch |
| replaced an outer lock in the response-packet event handling code, and lost |
| the _bh from that when doing so. |
| |
| Fix this by applying the _bh annotation to the state_lock locking. |
| |
| Fixes: a1399f8bb033 ("rxrpc: Call channels should have separate call number spaces") |
| Signed-off-by: David Howells <dhowells@redhat.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| net/rxrpc/conn_event.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| diff --git a/net/rxrpc/conn_event.c b/net/rxrpc/conn_event.c |
| index 75ec1ad595b72..2432c118397f6 100644 |
| --- a/net/rxrpc/conn_event.c |
| +++ b/net/rxrpc/conn_event.c |
| @@ -316,18 +316,18 @@ static int rxrpc_process_event(struct rxrpc_connection *conn, |
| return ret; |
| |
| spin_lock(&conn->channel_lock); |
| - spin_lock(&conn->state_lock); |
| + spin_lock_bh(&conn->state_lock); |
| |
| if (conn->state == RXRPC_CONN_SERVICE_CHALLENGING) { |
| conn->state = RXRPC_CONN_SERVICE; |
| - spin_unlock(&conn->state_lock); |
| + spin_unlock_bh(&conn->state_lock); |
| for (loop = 0; loop < RXRPC_MAXCALLS; loop++) |
| rxrpc_call_is_secure( |
| rcu_dereference_protected( |
| conn->channels[loop].call, |
| lockdep_is_held(&conn->channel_lock))); |
| } else { |
| - spin_unlock(&conn->state_lock); |
| + spin_unlock_bh(&conn->state_lock); |
| } |
| |
| spin_unlock(&conn->channel_lock); |
| -- |
| 2.25.1 |
| |