linux/net/xfrm
Hyunwoo Kim f7ad8b1d0e espintcp: Fix race condition in espintcp_close()
[ Upstream commit e1512c1db9 ]

This issue was discovered during a code audit.

After cancel_work_sync() is called from espintcp_close(),
espintcp_tx_work() can still be scheduled from paths such as
the Delayed ACK handler or ksoftirqd.
As a result, the espintcp_tx_work() worker may dereference a
freed espintcp ctx or sk.

The following is a simple race scenario:

           cpu0                             cpu1

  espintcp_close()
    cancel_work_sync(&ctx->work);
                                     espintcp_write_space()
                                       schedule_work(&ctx->work);

To prevent this race condition, cancel_work_sync() is
replaced with disable_work_sync().

Fixes: e27cca96cd ("xfrm: add espintcp (RFC 8229)")
Signed-off-by: Hyunwoo Kim <imv4bel@gmail.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/aZSie7rEdh9Nu0eM@v4bel
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2026-03-04 07:21:31 -05:00
..
espintcp.c espintcp: Fix race condition in espintcp_close() 2026-03-04 07:21:31 -05:00
Kconfig ipsec: Select CRYPTO_AEAD 2023-10-01 16:28:14 +08:00
Makefile xfrm: support sending NAT keepalives in ESP in UDP states 2024-06-26 13:22:42 +02:00
xfrm_algo.c net: fill in MODULE_DESCRIPTION()s for xfrm 2024-02-09 14:12:01 -08:00
xfrm_compat.c xfrm: Add support for per cpu xfrm state handling. 2025-02-08 09:58:00 +01:00
xfrm_device.c xfrm: always flush state and policy upon NETDEV_UNREGISTER event 2026-03-04 07:21:31 -05:00
xfrm_hash.c mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
xfrm_hash.h xfrm: add state hashtable keyed by seq 2021-05-14 13:52:01 +02:00
xfrm_inout.h xfrm: move xfrm4_extract_header to common helper 2020-05-06 09:40:08 +02:00
xfrm_input.c xfrm: Add an inbound percpu state cache. 2025-02-08 09:58:00 +01:00
xfrm_interface_bpf.c bpf: treewide: Annotate BPF kfuncs in BTF 2024-01-31 20:40:56 -08:00
xfrm_interface_core.c xfrm: interface: fix use-after-free after changing collect_md xfrm interface 2025-08-01 09:48:41 +01:00
xfrm_ipcomp.c xfrm: delete x->tunnel as we delete x 2025-12-12 18:37:17 +01:00
xfrm_nat_keepalive.c xfrm: support sending NAT keepalives in ESP in UDP states 2024-06-26 13:22:42 +02:00
xfrm_output.c xfrm: Prevent locally generated packets from direct output in tunnel mode 2025-12-01 11:43:29 +01:00
xfrm_policy.c xfrm: skip templates check for packet offload tunnel mode 2026-03-04 07:21:31 -05:00
xfrm_proc.c xfrm: Add dir validation to "in" data path lookup 2024-05-01 10:06:27 +02:00
xfrm_replay.c xfrm: replay: Fix the update of replay_esn->oseq_hi for GSO 2025-02-08 09:58:00 +01:00
xfrm_state.c xfrm: set ipv4 no_pmtu_disc flag only on output sa when direction is set 2026-01-23 11:18:35 +01:00
xfrm_state_bpf.c bpf: treewide: Annotate BPF kfuncs in BTF 2024-01-31 20:40:56 -08:00
xfrm_sysctl.c net: Remove ctl_table sentinel elements from several networking subsystems 2024-05-03 13:29:42 +01:00
xfrm_user.c Revert "xfrm: destroy xfrm_state synchronously on net exit path" 2025-12-12 18:37:17 +01:00