mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-30 10:00:03 -04:00
sctp: auth: discard auth_chunk when skb_clone fails
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> Acked-by: Xin Long <lucien.xin@gmail.com> Link: https://patch.msgid.link/20260723061107.384106-1-l1138897701@163.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user