In the Linux kernel, the following vulnerability has been resolved:
wifi: mac80211: Fix deadlock in ieee80211stapsdeliverwakeup()
The ieee80211stapsdeliverwakeup() function takes sta->pslock to synchronizes with ieee80211txhunicastpsbuf() which is called from softirq context. However using only spinlock() to get sta->pslock in ieee80211stapsdeliverwakeup() does not prevent softirq to execute on this same CPU, to run ieee80211txhunicastps_buf() and try to take this same lock ending in deadlock. Below is an example of rcu stall that arises in such situation.
rcu: INFO: rcusched self-detected stall on CPU rcu: 2-....: (42413413 ticks this GP) idle=b154/1/0x4000000000000000 softirq=1763/1765 fqs=21206996 rcu: (t=42586894 jiffies g=2057 q=362405 ncpus=4) CPU: 2 PID: 719 Comm: wpasupplicant Tainted: G W 6.4.0-02158-g1b062f552873 #742 Hardware name: RPT (r1) (DT) pstate: 00000005 (nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) pc : queuedspinlockslowpath+0x58/0x2d0 lr : invoketxhandlersearly+0x5b4/0x5c0 sp : ffff00001ef64660 x29: ffff00001ef64660 x28: ffff000009bc1070 x27: ffff000009bc0ad8 x26: ffff000009bc0900 x25: ffff00001ef647a8 x24: 0000000000000000 x23: ffff000009bc0900 x22: ffff000009bc0900 x21: ffff00000ac0e000 x20: ffff00000a279e00 x19: ffff00001ef646e8 x18: 0000000000000000 x17: ffff800016468000 x16: ffff00001ef608c0 x15: 0010533c93f64f80 x14: 0010395c9faa3946 x13: 0000000000000000 x12: 00000000fa83b2da x11: 000000012edeceea x10: ffff0000010fbe00 x9 : 0000000000895440 x8 : 000000000010533c x7 : ffff00000ad8b740 x6 : ffff00000c350880 x5 : 0000000000000007 x4 : 0000000000000001 x3 : 0000000000000000 x2 : 0000000000000000 x1 : 0000000000000001 x0 : ffff00000ac0e0e8 Call trace: queuedspinlockslowpath+0x58/0x2d0 ieee80211tx+0x80/0x12c ieee80211txpending+0x110/0x278 taskletactioncommon.constprop.0+0x10c/0x144 taskletaction+0x20/0x28 _stext+0x11c/0x284 dosoftirq+0xc/0x14 callonirqstack+0x24/0x34 dosoftirqownstack+0x18/0x20 dosoftirq+0x74/0x7c _localbhenableip+0xa0/0xa4 _ieee80211waketxqs+0x3b0/0x4b8 _ieee80211wakequeue+0x12c/0x168 ieee80211addpendingskbs+0xec/0x138 ieee80211stapsdeliverwakeup+0x2a4/0x480 ieee80211mpsstastatusupdate.part.0+0xd8/0x11c ieee80211mpsstastatusupdate+0x18/0x24 staapplyparameters+0x3bc/0x4c0 ieee80211changestation+0x1b8/0x2dc nl80211setstation+0x444/0x49c genlfamilyrcvmsgdoit.isra.0+0xa4/0xfc genlrcvmsg+0x1b0/0x244 netlinkrcvskb+0x38/0x10c genlrcv+0x34/0x48 netlinkunicast+0x254/0x2bc netlinksendmsg+0x190/0x3b4 syssendmsg+0x1e8/0x218 _syssendmsg+0x68/0x8c _syssendmsg+0x44/0x84 _arm64syssendmsg+0x20/0x28 doel0svc+0x6c/0xe8 el0svc+0x14/0x48 el0t64synchandler+0xb0/0xb4 el0t64_sync+0x14c/0x150
Using spinlockbh()/spinunlockbh() instead prevents softirq to raise on the same CPU that is holding the lock.
[
    {
        "id": "CVE-2024-40912-369e5c98",
        "deprecated": false,
        "signature_version": "v1",
        "signature_type": "Line",
        "digest": {
            "line_hashes": [
                "270817573735363955279623827146780863399",
                "267756935279485050131433388820168947851",
                "139158474428483914371158344121030424321",
                "6014915281262555567672992070650045813",
                "158730507978404491488885909640838616523",
                "200180721228329418541769321005069267545",
                "111729765767163436464927714022325344390",
                "81469012342596421429687353352424077802"
            ],
            "threshold": 0.9
        },
        "target": {
            "file": "net/mac80211/sta_info.c"
        },
        "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@e51637e0c66a6f72d134d9f95daa47ea62b43c7e"
    },
    {
        "id": "CVE-2024-40912-3a623c0f",
        "deprecated": false,
        "signature_version": "v1",
        "signature_type": "Line",
        "digest": {
            "line_hashes": [
                "163669560011906354260457153761587878508",
                "267756935279485050131433388820168947851",
                "139158474428483914371158344121030424321",
                "6014915281262555567672992070650045813",
                "158730507978404491488885909640838616523",
                "200180721228329418541769321005069267545",
                "262126992223171145906640088662493657775",
                "215489306306084612619349649690809759659"
            ],
            "threshold": 0.9
        },
        "target": {
            "file": "net/mac80211/sta_info.c"
        },
        "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@e7e916d693dcb5a297f40312600a82475f2e63bc"
    },
    {
        "id": "CVE-2024-40912-5201952a",
        "deprecated": false,
        "signature_version": "v1",
        "signature_type": "Line",
        "digest": {
            "line_hashes": [
                "163669560011906354260457153761587878508",
                "267756935279485050131433388820168947851",
                "139158474428483914371158344121030424321",
                "6014915281262555567672992070650045813",
                "158730507978404491488885909640838616523",
                "200180721228329418541769321005069267545",
                "262126992223171145906640088662493657775",
                "215489306306084612619349649690809759659"
            ],
            "threshold": 0.9
        },
        "target": {
            "file": "net/mac80211/sta_info.c"
        },
        "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@9c49b58b9a2bed707e7638576e54c4bccd97b9eb"
    },
    {
        "id": "CVE-2024-40912-66e9328b",
        "deprecated": false,
        "signature_version": "v1",
        "signature_type": "Line",
        "digest": {
            "line_hashes": [
                "163669560011906354260457153761587878508",
                "267756935279485050131433388820168947851",
                "139158474428483914371158344121030424321",
                "6014915281262555567672992070650045813",
                "158730507978404491488885909640838616523",
                "200180721228329418541769321005069267545",
                "262126992223171145906640088662493657775",
                "215489306306084612619349649690809759659"
            ],
            "threshold": 0.9
        },
        "target": {
            "file": "net/mac80211/sta_info.c"
        },
        "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@44c06bbde6443de206b30f513100b5670b23fc5e"
    },
    {
        "id": "CVE-2024-40912-849a4b1e",
        "deprecated": false,
        "signature_version": "v1",
        "signature_type": "Line",
        "digest": {
            "line_hashes": [
                "163669560011906354260457153761587878508",
                "267756935279485050131433388820168947851",
                "139158474428483914371158344121030424321",
                "6014915281262555567672992070650045813",
                "158730507978404491488885909640838616523",
                "200180721228329418541769321005069267545",
                "111729765767163436464927714022325344390",
                "81469012342596421429687353352424077802"
            ],
            "threshold": 0.9
        },
        "target": {
            "file": "net/mac80211/sta_info.c"
        },
        "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@28ba44d680a30c51cf485a2f5a3b680e66ed3932"
    },
    {
        "id": "CVE-2024-40912-86b5583a",
        "deprecated": false,
        "signature_version": "v1",
        "signature_type": "Line",
        "digest": {
            "line_hashes": [
                "163669560011906354260457153761587878508",
                "267756935279485050131433388820168947851",
                "139158474428483914371158344121030424321",
                "6014915281262555567672992070650045813",
                "158730507978404491488885909640838616523",
                "200180721228329418541769321005069267545",
                "262126992223171145906640088662493657775",
                "215489306306084612619349649690809759659"
            ],
            "threshold": 0.9
        },
        "target": {
            "file": "net/mac80211/sta_info.c"
        },
        "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@456bbb8a31e425177dc0e8d4f98728a560c20e81"
    },
    {
        "id": "CVE-2024-40912-d0f75376",
        "deprecated": false,
        "signature_version": "v1",
        "signature_type": "Line",
        "digest": {
            "line_hashes": [
                "163669560011906354260457153761587878508",
                "267756935279485050131433388820168947851",
                "139158474428483914371158344121030424321",
                "6014915281262555567672992070650045813",
                "158730507978404491488885909640838616523",
                "200180721228329418541769321005069267545",
                "262126992223171145906640088662493657775",
                "215489306306084612619349649690809759659"
            ],
            "threshold": 0.9
        },
        "target": {
            "file": "net/mac80211/sta_info.c"
        },
        "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@47d176755d5c0baf284eff039560f8c1ba0ea485"
    },
    {
        "id": "CVE-2024-40912-e19c76ca",
        "deprecated": false,
        "signature_version": "v1",
        "signature_type": "Line",
        "digest": {
            "line_hashes": [
                "163669560011906354260457153761587878508",
                "267756935279485050131433388820168947851",
                "139158474428483914371158344121030424321",
                "6014915281262555567672992070650045813",
                "158730507978404491488885909640838616523",
                "200180721228329418541769321005069267545",
                "262126992223171145906640088662493657775",
                "215489306306084612619349649690809759659"
            ],
            "threshold": 0.9
        },
        "target": {
            "file": "net/mac80211/sta_info.c"
        },
        "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@d90bdff79f8e40adf889b5408bfcf521528b169f"
    }
]