| From 97a3846e4605600a5f2f00ded60f16bdaba00d07 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 2 Jul 2021 10:11:21 +0200 |
| Subject: nvme-tcp: can't set sk_user_data without write_lock |
| |
| From: Maurizio Lombardi <mlombard@redhat.com> |
| |
| [ Upstream commit 0755d3be2d9bb6ea38598ccd30d6bbaa1a5c3a50 ] |
| |
| The sk_user_data pointer is supposed to be modified only while |
| holding the write_lock "sk_callback_lock", otherwise |
| we could race with other threads and crash the kernel. |
| |
| we can't take the write_lock in nvmet_tcp_state_change() |
| because it would cause a deadlock, but the release_work queue |
| will set the pointer to NULL later so we can simply remove |
| the assignment. |
| |
| Fixes: b5332a9f3f3d ("nvmet-tcp: fix incorrect locking in state_change sk callback") |
| |
| Signed-off-by: Maurizio Lombardi <mlombard@redhat.com> |
| Reviewed-by: Sagi Grimberg <sagi@grimberg.me> |
| Signed-off-by: Christoph Hellwig <hch@lst.de> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/nvme/target/tcp.c | 1 - |
| 1 file changed, 1 deletion(-) |
| |
| diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c |
| index 4df4f37e6b89..dedcb7aaf0d8 100644 |
| --- a/drivers/nvme/target/tcp.c |
| +++ b/drivers/nvme/target/tcp.c |
| @@ -1467,7 +1467,6 @@ static void nvmet_tcp_state_change(struct sock *sk) |
| case TCP_CLOSE_WAIT: |
| case TCP_CLOSE: |
| /* FALLTHRU */ |
| - sk->sk_user_data = NULL; |
| nvmet_tcp_schedule_release_queue(queue); |
| break; |
| default: |
| -- |
| 2.30.2 |
| |