In the Linux kernel, the following vulnerability has been resolved:
i3c: dw: Fix use-after-free in dwi3cmaster driver due to race condition
In dwi3ccommonprobe, &master->hjwork is bound with dwi3chjwork. And dwi3cmasterirqhandler can call dwi3cmasterirqhandleibis function to start the work.
If we remove the module which will call dwi3ccommonremove to make cleanup, it will free master->base through i3cmaster_unregister while the work mentioned above will be used. The sequence of operations that may lead to a UAF bug is as follows:
CPU0 CPU1
| dw_i3c_hj_work
dwi3ccommonremove | i3cmasterunregister(&master->base) | deviceunregister(&master->dev) | devicerelease | //free master->base | | i3cmasterdodaa(&master->base) | //use master->base
Fix it by ensuring that the work is canceled before proceeding with the cleanup in dwi3ccommon_remove.