In the Linux kernel, the following vulnerability has been resolved:
scsi: qla2xxx: Use rawsmpprocessorid() instead of smpprocessor_id()
The following call trace was observed:
localhost kernel: nvme nvme0: NVME-FC{0}: controller connect complete localhost kernel: BUG: using smpprocessorid() in preemptible [00000000] code: kworker/u129:4/75092 localhost kernel: nvme nvme0: NVME-FC{0}: new ctrl: NQN "nqn.1992-08.com.netapp:sn.b42d198afb4d11ecad6d00a098d6abfa:subsystem.PRChannel2022RH84subsystem291" localhost kernel: caller is qlanvmepostcmd+0x216/0x1380 [qla2xxx] localhost kernel: CPU: 6 PID: 75092 Comm: kworker/u129:4 Kdump: loaded Tainted: G B W OE --------- --- 5.14.0-70.22.1.el90.x8664+debug #1 localhost kernel: Hardware name: HPE ProLiant XL420 Gen10/ProLiant XL420 Gen10, BIOS U39 01/13/2022 localhost kernel: Workqueue: nvme-wq nvmeasynceventwork [nvmecore] localhost kernel: Call Trace: localhost kernel: dumpstacklvl+0x57/0x7d localhost kernel: checkpreemptiondisabled+0xc8/0xd0 localhost kernel: qlanvmepostcmd+0x216/0x1380 [qla2xxx]
Use rawsmpprocessorid() instead of smpprocessor_id().
Also use queuework() across the driver instead of queueworkon() thus avoiding usage of smpprocessorid() when CONFIGDEBUG_PREEMPT is enabled.