+12
−2
Loading
`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: 43e36921 ("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>