DORMANTno replies

[PATCH net-next v4] sctp: socket: set *err = 0 on receive shutdown

From: luoqing <hidden>
Date: 2026-07-21 02:26:09
Also in: linux-sctp, lkml
Subsystem: networking [general], sctp protocol, the rest · Maintainers: "David S. Miller", Eric Dumazet, Jakub Kicinski, Paolo Abeni, Marcelo Ricardo Leitner, Xin Long, Linus Torvalds

From: Qing Luo <redacted>

When sctp_skb_recv_datagram() detects RCV_SHUTDOWN, it breaks out
of the loop and returns NULL without setting *err. While current
callers happen to work correctly (sctp_recvmsg pre-initializes
err to 0, sctp_ulpevent_read_nxtinfo doesn't use err), this is
inconsistent with the generic __skb_wait_for_more_packets() in
net/core/datagram.c which explicitly sets *err = 0 on shutdown.

Set *err = 0 explicitly for correctness and robustness against
future callers.

Signed-off-by: Qing Luo <redacted>
---
 net/sctp/socket.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index c7b9e325ec1c..b8ec295e3a2f 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -9117,9 +9117,10 @@ struct sk_buff *sctp_skb_recv_datagram(struct sock *sk, int flags, int *err)
 		if (error)
 			goto no_packet;
 
-		if (sk->sk_shutdown & RCV_SHUTDOWN)
+		if (sk->sk_shutdown & RCV_SHUTDOWN) {
+			*err = 0;
 			break;
-
+		}
 
 		/* User doesn't want to wait.  */
 		error = -EAGAIN;
-- 
2.25.1
Thanks for the review.

On reflection, I agree that the ERR_PTR refactoring should be dropped. Honestly, the refactored version ends up being more convoluted rather than simplifying things, so I’ll revert to the original &err interface to keep it consistent with skb_recv_datagram().

Regarding the *err = 0 fix for the shutdown path — my intention there was purely defensive, aligning with the pattern used in __skb_wait_for_more_packets(). As the commit message notes, the current callers are not actually affected by this, so no real bug is introduced. That said, if you feel this change is still unnecessary, I’m happy to drop it as well.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help