In the Linux kernel, the following vulnerability has been resolved:
scsi: core: wake eh reliably when using scsischeduleeh
Drivers which use the scsischeduleeh function to run the error handler currently risk the error handler thread never waking once all commands are timed out or inactive. There is no enforced memory order between setting the host into error recovery state and counting busy commands. This can result in a race with scsidechost_busy where neither CPU sees both conditions of all commands inactive and the host error state to request waking the error handler.
To fix this, run the scsischeduleeh's scsiehwakeup from a new work item which will use rcu to ensure scsischeduleeh's call to scsihostbusy will occur after the error state is globally visible and will be seen by any current scsidechost_busy callers.