linux/net/nfc
Jakub Kicinski edc988613d nfc: rawsock: cancel tx_work before socket teardown
[ Upstream commit d793458c45 ]

In rawsock_release(), cancel any pending tx_work and purge the write
queue before orphaning the socket.  rawsock_tx_work runs on the system
workqueue and calls nfc_data_exchange which dereferences the NCI
device.  Without synchronization, tx_work can race with socket and
device teardown when a process is killed (e.g. by SIGKILL), leading
to use-after-free or leaked references.

Set SEND_SHUTDOWN first so that if tx_work is already running it will
see the flag and skip transmitting, then use cancel_work_sync to wait
for any in-progress execution to finish, and finally purge any
remaining queued skbs.

Fixes: 23b7869c0f ("NFC: add the NFC socket raw protocol")
Reviewed-by: Joe Damato <joe@dama.to>
Link: https://patch.msgid.link/20260303162346.2071888-6-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2026-03-12 07:09:59 -04:00
..
hci nfc: hci: shdlc: Stop timers and work before freeing context 2026-02-26 14:59:20 -08:00
nci nfc: nci: clear NCI_DATA_EXCHANGE before calling completion callback 2026-03-12 07:09:58 -04:00
af_nfc.c nfc: fix error handling of nfc_proto_register() 2021-10-13 17:32:38 -07:00
core.c nfc: nci: Fix race between rfkill and nci_unregister_device(). 2026-02-06 16:57:32 +01:00
digital.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 288 2019-06-05 17:36:37 +02:00
digital_core.c net: fill in MODULE_DESCRIPTION()s for NFC 2024-01-11 16:16:08 -08:00
digital_dep.c net:nfc:digital: Fix a double free in digital_tg_recv_dep_req 2021-04-27 15:36:10 -07:00
digital_technology.c NFC: digital: fix possible memory leak in digital_in_send_sdd_req() 2021-10-13 17:44:29 -07:00
Kconfig net: remove redundant 'depends on NET' 2021-01-27 17:04:12 -08:00
llcp.h net: nfc: Fix use-after-free caused by nfc_llcp_find_local 2023-06-26 10:57:23 +01:00
llcp_commands.c nfc: llcp: Fix memleak in nfc_llcp_send_ui_frame(). 2026-02-06 16:57:31 +01:00
llcp_core.c nfc: llcp: Fix memleak in nfc_llcp_send_ui_frame(). 2026-02-06 16:57:31 +01:00
llcp_sock.c net: change proto and proto_ops accept type 2024-05-13 18:19:09 -06:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
netlink.c nfc: Remove checks for nla_data returning NULL 2025-06-18 14:17:32 -07:00
nfc.h net: nfc: Fix use-after-free caused by nfc_llcp_find_local 2023-06-26 10:57:23 +01:00
rawsock.c nfc: rawsock: cancel tx_work before socket teardown 2026-03-12 07:09:59 -04:00