| From 34a93041e44c9a70c80dbd9587e7ba466a428be5 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 12 Feb 2026 20:54:09 -0700 |
| Subject: net/rds: rds_sendmsg should not discard payload_len |
| |
| From: Allison Henderson <achender@kernel.org> |
| |
| [ Upstream commit da29e453dcb3aa7cabead7915f5f945d0add3a52 ] |
| |
| Commit 3db6e0d172c9 ("rds: use RCU to synchronize work-enqueue with |
| connection teardown") modifies rds_sendmsg to avoid enqueueing work |
| while a tear down is in progress. However, it also changed the return |
| value of rds_sendmsg to that of rds_send_xmit instead of the |
| payload_len. This means the user may incorrectly receive errno values |
| when it should have simply received a payload of 0 while the peer |
| attempts a reconnections. So this patch corrects the teardown handling |
| code to only use the out error path in that case, thus restoring the |
| original payload_len return value. |
| |
| Fixes: 3db6e0d172c9 ("rds: use RCU to synchronize work-enqueue with connection teardown") |
| Reviewed-by: Simon Horman <horms@kernel.org> |
| Signed-off-by: Allison Henderson <achender@kernel.org> |
| Link: https://patch.msgid.link/20260213035409.1963391-1-achender@kernel.org |
| Signed-off-by: Paolo Abeni <pabeni@redhat.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| net/rds/send.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| diff --git a/net/rds/send.c b/net/rds/send.c |
| index 0b3d0ef2f008b..071c5dca969a2 100644 |
| --- a/net/rds/send.c |
| +++ b/net/rds/send.c |
| @@ -1382,9 +1382,11 @@ int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len) |
| else |
| queue_delayed_work(rds_wq, &cpath->cp_send_w, 1); |
| rcu_read_unlock(); |
| + |
| + if (ret) |
| + goto out; |
| } |
| - if (ret) |
| - goto out; |
| + |
| rds_message_put(rm); |
| |
| for (ind = 0; ind < vct.indx; ind++) |
| -- |
| 2.51.0 |
| |