linux/net/caif
Zhengchuan Liang 7ef97d4675 net: caif: clear client service pointer on teardown
commit f7cf8ece8c upstream.

`caif_connect()` can tear down an existing client after remote shutdown by
calling `caif_disconnect_client()` followed by `caif_free_client()`.
`caif_free_client()` releases the service layer referenced by
`adap_layer->dn`, but leaves that pointer stale.

When the socket is later destroyed, `caif_sock_destructor()` calls
`caif_free_client()` again and dereferences the freed service pointer.

Clear the client/service links before releasing the service object so
repeated teardown becomes harmless.

Fixes: 43e3692101 ("caif: Move refcount from service layer to sock and dev.")
Cc: stable@kernel.org
Reported-by: Yifan Wu <yifanwucs@gmail.com>
Reported-by: Juefei Pu <tomapufckgml@gmail.com>
Co-developed-by: Yuan Tan <yuantan098@gmail.com>
Signed-off-by: Yuan Tan <yuantan098@gmail.com>
Suggested-by: Xin Liu <bird@lzu.edu.cn>
Tested-by: Ren Wei <enjou1224z@gmail.com>
Signed-off-by: Zhengchuan Liang <zcliangcn@gmail.com>
Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
Link: https://patch.msgid.link/9f3d37847c0037568aae698ca23cd47c6691acb0.1775897577.git.zcliangcn@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2026-06-01 17:35:14 +02:00
..
caif_dev.c net: caif: fix memory leak in caif_device_notify 2021-06-03 15:05:07 -07:00
caif_socket.c net: Remove WARN_ON_ONCE(sk->sk_forward_alloc) from sk_stream_kill_queues(). 2023-03-03 11:45:53 +01:00
caif_usb.c net: caif: Fix use-after-free in cfusbl_device_notify() 2023-03-17 08:48:54 +01:00
cfcnfg.c net: caif: modify the label out_err to out 2021-06-18 12:07:09 -07:00
cfctrl.c caif: reduce stack size, again 2025-08-28 16:24:07 +02:00
cfdbgl.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
cfdgml.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
cffrml.c caif: fix integer underflow in cffrml_receive() 2026-01-19 13:09:44 +01:00
cfmuxl.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
cfpkt_skbuff.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
cfrfml.c net: caif: fix error code handling 2020-08-25 07:50:25 -07:00
cfserl.c net: caif: added cfserl_release function 2021-06-03 15:05:06 -07:00
cfsrvl.c net: caif: clear client service pointer on teardown 2026-06-01 17:35:14 +02:00
cfutill.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
cfveil.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
cfvidl.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
chnl_net.c net: caif: fix double disconnect client in chnl_net_open() 2022-11-26 09:24:39 +01:00
Kconfig treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00