In the Linux kernel, the following vulnerability has been resolved:
nfc: st-nci: Fix use after free bug in ndlc_remove due to race condition
This bug influences both stncii2cremove and stncispiremove. Take stncii2c_remove as an example.
In stncii2cprobe, it called ndlcprobe and bound &ndlc->smwork with lltndlcsmwork.
When it calls ndlcrecv or timeout handler, it will finally call schedulework to start the work.
When we call stncii2c_remove to remove the driver, there may be a sequence as follows:
Fix it by finishing the work before cleanup in ndlc_remove
CPU0 CPU1
|llt_ndlc_sm_work
stncii2cremove | ndlcremove | stnciremove | ncifreedevice| kfree(ndev) | //free ndlc->ndev | |lltndlcrcvqueue |ncirecv_frame |//use ndlc->ndev