linux/net/smc
D. Wythe 35a306bb53 net/smc: fix mismatch between CLC header and proposal
[ Upstream commit ec33f2e5a2 ]

The current CLC proposal message construction uses a mix of
`ini->smc_type_v1/v2` and `pclc_base->hdr.typev1/v2` to decide whether
to include optional extensions (IPv6 prefix extension for v1, and v2
extension). This leads to a critical inconsistency: when
`smc_clc_prfx_set()` fails - for example, in IPv6-only environments with
only link-local addresses, or when the local IP address and the outgoing
interface’s network address are not in the same subnet.

As a result, the proposal message is assembled using the stale
`ini->smc_type_v1` value—causing the IPv6 prefix extension to be
included even though the header indicates v1 is not supported.
The peer then receives a malformed CLC proposal where the header type
does not match the payload, and immediately resets the connection.

The fix ensures consistency between the CLC header flags and the actual
payload by synchronizing `ini->smc_type_v1` with `pclc_base->hdr.typev1`
when prefix setup fails.

Fixes: 8c3dca341a ("net/smc: build and send V2 CLC proposal")
Signed-off-by: D. Wythe <alibuda@linux.alibaba.com>
Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
Link: https://patch.msgid.link/20251107024029.88753-1-alibuda@linux.alibaba.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2025-11-24 10:35:50 +01:00
..
af_smc.c net/smc: fix UAF on smcsk after smc_listen_out() 2025-08-28 16:31:14 +02:00
Kconfig net/smc: introduce loopback-ism for SMC intra-OS shortcut 2024-04-30 13:24:48 +02:00
Makefile net/smc: Introduce IPPROTO_SMC 2024-06-17 13:14:09 +01:00
smc.h smc: Fix various oops due to inet_sock type confusion. 2025-07-24 08:56:31 +02:00
smc_cdc.c net/smc: adapt cursor update when sndbuf and peer DMB are merged 2024-04-30 13:24:48 +02:00
smc_cdc.h net/smc: fix kernel panic caused by race of smc_sock 2021-12-28 12:42:45 +00:00
smc_clc.c net/smc: fix mismatch between CLC header and proposal 2025-11-24 10:35:50 +01:00
smc_clc.h net/smc: check smcd_v2_ext_offset when receiving proposal msg 2024-12-27 14:02:02 +01:00
smc_close.c net/smc: put sk reference if close work was canceled 2023-11-06 10:01:07 +00:00
smc_close.h net/smc: remove close abort worker 2019-10-22 11:23:44 -07:00
smc_core.c net/smc: protect link down work from execute after lgr freed 2024-12-27 14:02:01 +01:00
smc_core.h net/smc: introduce statistics for allocated ringbufs of link group 2024-08-20 11:38:23 +02:00
smc_diag.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2024-01-25 14:20:08 -08:00
smc_ib.c net/smc: fix one NULL pointer dereference in smc_ib_is_sg_need_sync() 2025-09-09 18:58:08 +02:00
smc_ib.h net/smc: fix smc clc failed issue when netdevice not in init_net 2023-10-13 16:52:02 -07:00
smc_inet.c net/smc: fix general protection fault in __smc_diag_dump 2025-10-29 14:08:54 +01:00
smc_inet.h net/smc: Introduce IPPROTO_SMC 2024-06-17 13:14:09 +01:00
smc_ism.c net/smc: add operations to merge sndbuf with peer DMB 2024-04-30 13:24:48 +02:00
smc_ism.h net/smc: add operations to merge sndbuf with peer DMB 2024-04-30 13:24:48 +02:00
smc_llc.c net/smc: support max links per lgr negotiation in clc handshake 2023-08-19 12:46:53 +01:00
smc_llc.h net/smc: Introduce a specific sysctl for TEST_LINK time 2022-09-22 12:58:21 +02:00
smc_loopback.c net/smc: fix warning in smc_rx_splice() when calling get_page() 2025-10-02 13:44:10 +02:00
smc_loopback.h net/smc: remove unreferenced header in smc_loopback.h file 2024-07-31 11:48:58 +01:00
smc_netlink.c genetlink: start to validate reserved header bytes 2022-08-29 12:47:15 +01:00
smc_netlink.h net/smc: add support for user defined EIDs 2021-09-14 12:49:10 +01:00
smc_netns.h net/smc: introduce list of pnetids for Ethernet devices 2020-09-28 15:19:03 -07:00
smc_pnet.c net/smc: use the correct ndev to find pnetid by pnetid table 2025-05-29 11:02:18 +02:00
smc_pnet.h net/smc: Use a mutex for locking "struct smc_pnettable" 2022-02-24 09:09:33 -08:00
smc_rx.c net/smc: fix data error when recvmsg with MSG_PEEK flag 2025-02-08 09:57:16 +01:00
smc_rx.h net/smc: fix data error when recvmsg with MSG_PEEK flag 2025-02-08 09:57:16 +01:00
smc_stats.c net/smc: introduce statistics for ringbufs usage of net namespace 2024-08-20 11:38:23 +02:00
smc_stats.h net/smc: introduce statistics for ringbufs usage of net namespace 2024-08-20 11:38:23 +02:00
smc_sysctl.c net/smc: add sysctl for smc_limit_hs 2024-09-10 12:11:04 +02:00
smc_sysctl.h net/smc: add sysctl for max conns per lgr for SMC-R v2.1 2023-11-24 12:13:14 +00:00
smc_tracepoint.c net/smc: Introduce tracepoint for smcr link down 2021-11-01 13:39:14 +00:00
smc_tracepoint.h tracing/treewide: Remove second parameter of __assign_str() 2024-05-22 20:14:47 -04:00
smc_tx.c net/smc: remove unneeded atomic operations in smc_tx_sndbuf_nonempty 2023-11-24 15:00:47 +00:00
smc_tx.h smc: Drop smc_sendpage() in favour of smc_sendmsg() + MSG_SPLICE_PAGES 2023-06-24 15:50:12 -07:00
smc_wr.c net/smc: Fix memory leak when using percpu refs 2024-10-14 17:32:05 -07:00
smc_wr.h net/smc: Use percpu ref for wr tx reference 2023-03-17 08:59:01 +00:00