linux/net/rxrpc
Anderson Nascimento 41a117dd80 rxrpc: Fix missing validation of ticket length in non-XDR key preparsing
commit ac33733b10 upstream.

In rxrpc_preparse(), there are two paths for parsing key payloads: the
XDR path (for large payloads) and the non-XDR path (for payloads <= 28
bytes). While the XDR path (rxrpc_preparse_xdr_rxkad()) correctly
validates the ticket length against AFSTOKEN_RK_TIX_MAX, the non-XDR
path fails to do so.

This allows an unprivileged user to provide a very large ticket length.
When this key is later read via rxrpc_read(), the total
token size (toksize) calculation results in a value that exceeds
AFSTOKEN_LENGTH_MAX, triggering a WARN_ON().

[ 2001.302904] WARNING: CPU: 2 PID: 2108 at net/rxrpc/key.c:778 rxrpc_read+0x109/0x5c0 [rxrpc]

Fix this by adding a check in the non-XDR parsing path of rxrpc_preparse()
to ensure the ticket length does not exceed AFSTOKEN_RK_TIX_MAX,
bringing it into parity with the XDR parsing logic.

Fixes: 8a7a3eb4dd ("KEYS: RxRPC: Use key preparsing")
Fixes: 84924aac08 ("rxrpc: Fix checker warning")
Reported-by: Anderson Nascimento <anderson@allelesecurity.com>
Signed-off-by: Anderson Nascimento <anderson@allelesecurity.com>
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: Jeffrey Altman <jaltman@auristor.com>
cc: Simon Horman <horms@kernel.org>
cc: linux-afs@lists.infradead.org
cc: stable@kernel.org
Link: https://patch.msgid.link/20260422161438.2593376-7-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2026-06-01 17:35:12 +02:00
..
af_rxrpc.c rxrpc: Fix key/keyring checks in setsockopt(RXRPC_SECURITY_KEY/KEYRING) 2026-04-18 10:33:37 +02:00
ar-internal.h rxrpc: Fix race between conn bundle lookup and bundle removal [ZDI-CAN-15975] 2022-12-02 17:41:04 +01:00
call_accept.c rxrpc: Fix oops due to non-existence of prealloc backlog struct 2025-07-17 18:30:48 +02:00
call_event.c rxrpc: Fix calc of resend age 2022-09-23 14:15:50 +02:00
call_object.c rxrpc: Fix call removal to use RCU safe deletion 2026-06-01 17:35:08 +02:00
conn_client.c rxrpc: Fix race between conn bundle lookup and bundle removal [ZDI-CAN-15975] 2022-12-02 17:41:04 +01:00
conn_event.c rxrpc: only handle RESPONSE during service challenge 2026-06-01 17:35:12 +02:00
conn_object.c rxrpc: Use refcount_t rather than atomic_t 2022-12-02 17:41:04 +01:00
conn_service.c rxrpc_find_service_conn_rcu: fix the usage of read_seqbegin_or_lock() 2024-02-23 08:54:39 +01:00
input.c rxrpc: Use refcount_t rather than atomic_t 2022-12-02 17:41:04 +01:00
insecure.c rxrpc: Ask the security class how much space to allow in a packet 2020-11-23 19:53:11 +00:00
Kconfig net: RxRPC: make dependent Kconfig symbols be shown indented 2021-08-18 10:12:11 +01:00
key.c rxrpc: Fix missing validation of ticket length in non-XDR key preparsing 2026-06-01 17:35:12 +02:00
local_event.c rxrpc: Fix a typo 2021-06-02 14:01:55 -07:00
local_object.c rxrpc: Use refcount_t rather than atomic_t 2022-12-02 17:41:04 +01:00
Makefile rxrpc: Split the server key type (rxrpc_s) into its own file 2020-11-23 18:09:29 +00:00
misc.c rxrpc: Fix the excessive initial retransmission timeout 2020-05-11 16:42:28 +01:00
net_ns.c rxrpc: Allow list of in-use local UDP endpoints to be viewed in /proc 2022-12-02 17:41:04 +01:00
output.c rxrpc: Fix ack.bufferSize to be 0 when generating an ack 2022-12-31 13:14:09 +01:00
peer_event.c rxrpc: Fix ICMP/ICMP6 error handling 2022-09-15 11:30:05 +02:00
peer_object.c rxrpc: Use refcount_t rather than atomic_t 2022-12-02 17:41:04 +01:00
proc.c rxrpc: proc: size address buffers for %pISpc output 2026-06-01 17:35:06 +02:00
protocol.h rxrpc: Improve jumbo packet counting 2019-08-27 09:48:37 +01:00
recvmsg.c rxrpc: Fix recvmsg() unconditional requeue 2026-06-01 17:35:11 +02:00
rtt.c rxrpc: Fix _usecs_to_jiffies() by using usecs_to_jiffies() 2021-11-18 19:16:25 +01:00
rxkad.c rxrpc: reject undecryptable rxkad response tickets 2026-06-01 17:35:08 +02:00
security.c rxrpc: Hand server key parsing off to the security class 2020-11-23 18:09:29 +00:00
sendmsg.c rxrpc: Fix anonymous key handling 2026-06-01 17:35:12 +02:00
server_key.c rxrpc: fix reference count leak in rxrpc_server_keyring() 2026-04-18 10:33:37 +02:00
skbuff.c rxrpc: Use refcount_t rather than atomic_t 2022-12-02 17:41:04 +01:00
sysctl.c rxrpc: Fix listen() setting the bar too high for the prealloc rings 2022-06-09 10:23:02 +02:00
utils.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 36 2019-05-24 17:27:11 +02:00