net/sctp/associola.c | 4 ++++ net/sctp/endpointola.c | 4 ++++ 2 files changed, 8 insertions(+)
From: Qing Luo <luoqing@kylinos.cn>
When processing AUTH + COOKIE-ECHO packets, if skb_clone() fails
due to memory pressure, chunk->auth_chunk is NULL. The original
code still sets chunk->auth = 1 and continues, leaving the
COOKIE-ECHO to be processed without a valid auth_chunk for
deferred verification.
Discard the AUTH chunk early via pdiscard when skb_clone() fails,
so that the receive loop can continue processing remaining chunks
in the inqueue instead of stalling the entire packet.
Signed-off-by: Qing Luo <luoqing@kylinos.cn>
---
net/sctp/associola.c | 4 ++++
net/sctp/endpointola.c | 4 ++++
2 files changed, 8 insertions(+)
diff --git a/net/sctp/associola.c b/net/sctp/associola.c
index 62d3cc155809..a5f2835dbe0f 100644
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -999,6 +999,10 @@ static void sctp_assoc_bh_rcv(struct work_struct *work)
if (next_hdr->type == SCTP_CID_COOKIE_ECHO) {
chunk->auth_chunk = skb_clone(chunk->skb,
GFP_ATOMIC);
+ if (!chunk->auth_chunk) {
+ chunk->pdiscard = 1;
+ continue;
+ }
chunk->auth = 1;
continue;
}
diff --git a/net/sctp/endpointola.c b/net/sctp/endpointola.c
index dfb1719275db..a15b599b20b7 100644
--- a/net/sctp/endpointola.c
+++ b/net/sctp/endpointola.c
@@ -368,6 +368,10 @@ static void sctp_endpoint_bh_rcv(struct work_struct *work)
if (next_hdr->type == SCTP_CID_COOKIE_ECHO) {
chunk->auth_chunk = skb_clone(chunk->skb,
GFP_ATOMIC);
+ if (!chunk->auth_chunk) {
+ chunk->pdiscard = 1;
+ continue;
+ }
chunk->auth = 1;
continue;
}
--
2.25.1
Thank you for the review and the suggestion.
I agree that using chunk->pdiscard = 1; continue; is better than break;. It avoids stalling the entire inqueue under memory pressure and follows the existing discard convention in SCTP. I will update the patch accordingly.
Thanks,
luoqing
On Thu, 23 Jul 2026 14:11:07 +0800 luoqing wrote: > When processing AUTH + COOKIE-ECHO packets, if skb_clone() fails > due to memory pressure, chunk->auth_chunk is NULL. The original > code still sets chunk->auth = 1 and continues, leaving the > COOKIE-ECHO to be processed without a valid auth_chunk for > deferred verification. > > Discard the AUTH chunk early via pdiscard when skb_clone() fails, > so that the receive loop can continue processing remaining chunks > in the inqueue instead of stalling the entire packet. Please stop sending patches in reply to existing threads.
© 2016 - 2026 Red Hat, Inc.