]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
rxrpc: Fix transmission of an abort in response to an abort
authorDavid Howells <dhowells@redhat.com>
Thu, 17 Jul 2025 07:43:44 +0000 (08:43 +0100)
committerJakub Kicinski <kuba@kernel.org>
Thu, 17 Jul 2025 14:50:48 +0000 (07:50 -0700)
Under some circumstances, such as when a server socket is closing, ABORT
packets will be generated in response to incoming packets.  Unfortunately,
this also may include generating aborts in response to incoming aborts -
which may cause a cycle.  It appears this may be made possible by giving
the client a multicast address.

Fix this such that rxrpc_reject_packet() will refuse to generate aborts in
response to aborts.

Fixes: 248f219cb8bc ("rxrpc: Rewrite the data and ack handling code")
Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Jeffrey Altman <jaltman@auristor.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: Junvyyang, Tencent Zhuque Lab <zhuque@tencent.com>
cc: LePremierHomme <kwqcheii@proton.me>
cc: Linus Torvalds <torvalds@linux-foundation.org>
cc: Simon Horman <horms@kernel.org>
cc: linux-afs@lists.infradead.org
Link: https://patch.msgid.link/20250717074350.3767366-5-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/rxrpc/output.c

index ef7b3096c95ebded7aefb445b65711716e15e8ae..17c33b5cf7dde1593c181ef07f061acb1e797abb 100644 (file)
@@ -814,6 +814,9 @@ void rxrpc_reject_packet(struct rxrpc_local *local, struct sk_buff *skb)
        __be32 code;
        int ret, ioc;
 
+       if (sp->hdr.type == RXRPC_PACKET_TYPE_ABORT)
+               return; /* Never abort an abort. */
+
        rxrpc_see_skb(skb, rxrpc_skb_see_reject);
 
        iov[0].iov_base = &whdr;