linux/net/psp
Daniel Zahka 86a1928442 net: psp: require an established connection for association setup
Check sk_state under the socket lock in both the rx-assoc and tx-assoc
handlers, and only allow association setup on sockets in
TCP_ESTABLISHED. Also, fail connect() when PSP assoc state is already
present, and remove the dead PSP MSS adjustment from
tcp_v[46]_connect().

The net effect of this commit is:
1. PSP assoc state can never exist on a listen socket.
2. The upgrade to PSP must be done while the socket is in
   TCP_ESTABLISHED.

This change defeatures behavior that was previously allowed under the
PSP uapi. My justification is:

Nothing useful can be done after association setup on closed or listen
sockets today. Listen sockets could accept a PSP-encrypted TCP SYN, but
the child socket will not inherit any PSP state. On the other side,
establishing PSP state prior to connect() will result in a PSP-encrypted
TCP SYN sent to a listening peer, which in turn has the aforementioned
limitations. That implies that there cannot be any users of this
feature, so it should be safe to remove it from the PSP uapi.

In theory, the check in the tx-assoc path is more restrictive than
necessary. FIN_WAIT1/2, CLOSING, LAST_ACK and CLOSE_WAIT could be
allowed, and the peer would accept PSP-encrypted ACKs in the
post-FIN-sent states, or data in the half-close case, but it is simpler
to disallow those states because they don't fit the upgrade model.

The check in the tx-assoc path fixes a bug in commit 6b46ca260e ("net:
psp: add socket security association code") where an unsynchronized
write can be performed on an assoc shared with a timewait socket when
the socket is in TCP_CLOSE after shutdown. This commit is not targeted
at net because its premise of preventing listen sockets from holding
assoc state depends on net-next commit 8cc3aef0cb ("tcp: Do not allow
buggy transitions between ehash and lhash2.")

Signed-off-by: Daniel Zahka <daniel.zahka@gmail.com>
Fixes: 6b46ca260e ("net: psp: add socket security association code")
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/20260930-psp-defeat-v2-2-f266e7447129@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-10-05 15:59:46 -07:00
..
Kconfig net: psp: select CONFIG_SKB_EXTENSIONS 2026-02-17 17:05:29 -08:00
Makefile net: psp: add socket security association code 2025-09-18 12:32:06 +02:00
psp_main.c psp: notify about a disassociation once it has happened 2026-09-15 18:07:12 -07:00
psp_nl.c psp: notify about a disassociation once it has happened 2026-09-15 18:07:12 -07:00
psp_sock.c net: psp: require an established connection for association setup 2026-10-05 15:59:46 -07:00
psp-nl-gen.c psp: add a new netdev event for dev unregister 2026-06-12 18:31:32 -07:00
psp-nl-gen.h psp: add a new netdev event for dev unregister 2026-06-12 18:31:32 -07:00
psp.h psp: notify about a disassociation once it has happened 2026-09-15 18:07:12 -07:00