In the Linux kernel, the following vulnerability has been resolved:
gpio: pca953x: fix pca953xirqbussyncunlock race
Ensure that `i2clock' is held when setting interrupt latch and mask in pca953xirqbussync_unlock() in order to avoid races.
The other (non-probe) call site pca953xgpiosetmultiple() ensures the lock is held before calling pca953xwrite_regs().
The problem occurred when a request raced against irqbussync_unlock() approximately once per thousand reboots on an i.MX8MP based system.
Normal case
0-0022: write register AI|3a {03,02,00,00,01} Input latch P0 0-0022: write register AI|49 {fc,fd,ff,ff,fe} Interrupt mask P0 0-0022: write register AI|08 {ff,00,00,00,00} Output P3 0-0022: write register AI|12 {fc,00,00,00,00} Config P3
Race case
0-0022: write register AI|08 {ff,00,00,00,00} Output P3 0-0022: write register AI|08 {03,02,00,00,01} * Wrong register * 0-0022: write register AI|12 {fc,00,00,00,00} Config P3 0-0022: write register AI|49 {fc,fd,ff,ff,fe} Interrupt mask P0