CVE-2022-50652

Source
https://cve.org/CVERecord?id=CVE-2022-50652
Import Source
https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2022-50652.json
JSON Data
https://api.test.osv.dev/v1/vulns/CVE-2022-50652
Downstream
Related
Published
2025-12-09T00:00:26.593Z
Modified
2026-03-20T11:47:34.006764Z
Summary
uio: uio_dmem_genirq: Fix missing unlock in irq configuration
Details

In the Linux kernel, the following vulnerability has been resolved:

uio: uiodmemgenirq: Fix missing unlock in irq configuration

Commit b74351287d4b ("uio: fix a sleep-in-atomic-context bug in uiodmemgenirqirqcontrol()") started calling disableirq() without holding the spinlock because it can sleep. However, that fix introduced another bug: if interrupt is already disabled and a new disable request comes in, then the spinlock is not unlocked:

root@localhost:~# printf '\x00\x00\x00\x00' > /dev/uio0 root@localhost:~# printf '\x00\x00\x00\x00' > /dev/uio0 root@localhost:~# [ 14.851538] BUG: scheduling while atomic: bash/223/0x00000002 [ 14.851991] Modules linked in: uiodmemgenirq uio myfpga(OE) bochs drmvramhelper drmttmhelper ttm drmkmshelper drm sndpcm ppdev joydev psmouse sndtimer snd e1000fbsysfops syscopyarea parport sysfillrect soundcore sysimgblt inputleds pcspkr i2cpiix4 serioraw floppy evbug qemufwcfg machid pataacpi iptables xtables autofs4 [last unloaded: parportpc] [ 14.854206] CPU: 0 PID: 223 Comm: bash Tainted: G OE 6.0.0-rc7 #21 [ 14.854786] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014 [ 14.855664] Call Trace: [ 14.855861] <TASK> [ 14.856025] dumpstacklvl+0x4d/0x67 [ 14.856325] dump_stack+0x14/0x1a [ 14.856583] __schedule_bug.cold+0x4b/0x5c [ 14.856915] __schedule+0xe81/0x13d0 [ 14.857199] ? idrfind+0x13/0x20 [ 14.857456] ? getwork_pool+0x2d/0x50 [ 14.857756] ? __flush_work+0x233/0x280 [ 14.858068] ? __schedule+0xa95/0x13d0 [ 14.858307] ? idrfind+0x13/0x20 [ 14.858519] ? getworkpool+0x2d/0x50 [ 14.858798] schedule+0x6c/0x100 [ 14.859009] schedulehrtimeoutrangeclock+0xff/0x110 [ 14.859335] ? ttywriteroom+0x1f/0x30 [ 14.859598] ? nttypoll+0x1ec/0x220 [ 14.859830] ? ttyldiscderef+0x1a/0x20 [ 14.860090] schedulehrtimeoutrange+0x17/0x20 [ 14.860373] do_select+0x596/0x840 [ 14.860627] ? __kerneltextaddress+0x16/0x50 [ 14.860954] ? pollfreewait+0xb0/0xb0 [ 14.861235] ? pollfreewait+0xb0/0xb0 [ 14.861517] ? rpmresume+0x49d/0x780 [ 14.861798] ? commoninterrupt+0x59/0xa0 [ 14.862127] ? asmcommoninterrupt+0x2b/0x40 [ 14.862511] ? __uart_start.isra.0+0x61/0x70 [ 14.862902] ? __checkobjectsize+0x61/0x280 [ 14.863255] coresysselect+0x1c6/0x400 [ 14.863575] ? vfswrite+0x1c9/0x3d0 [ 14.863853] ? vfswrite+0x1c9/0x3d0 [ 14.864121] ? copyfromuser+0x45/0x70 [ 14.864526] dopselect.constprop.0+0xb3/0xf0 [ 14.864893] ? dosyscall64+0x6d/0x90 [ 14.865228] ? dosyscall64+0x6d/0x90 [ 14.865556] __x64syspselect6+0x76/0xa0 [ 14.865906] dosyscall64+0x60/0x90 [ 14.866214] ? syscallexittousermode+0x2a/0x50 [ 14.866640] ? dosyscall64+0x6d/0x90 [ 14.866972] ? dosyscall64+0x6d/0x90 [ 14.867286] ? dosyscall64+0x6d/0x90 [ 14.867626] entrySYSCALL64afterhwframe+0x63/0xcd [...] stripped [ 14.872959] </TASK>

('myfpga' is a simple 'uiodmemgenirq' driver I wrote to test this)

The implementation of "uiodmemgenirq" was based on "uiopdrvgenirq" and it is used in a similar manner to the "uiopdrvgenirq" driver with respect to interrupt configuration and handling. At the time "uiodmemgenirq" was introduced, both had the same implementation of the 'uioinfo' handlers irqcontrol() and handler(). Then commit 34cb27528398 ("UIO: Fix concurrency issue"), which was only applied to "uiopdrvgenirq", ended up making them a little different. That commit, among other things, changed disableirq() to disableirqnosync() in the implementation of irqcontrol(). The motivation there was to avoid a deadlock between irqcontrol() and handler(), since it added a spinlock in the irq handler, and disable_irq() waits for the completion of the irq handler.

By changing disableirq() to disableirq_nosync() in irqcontrol(), we also avoid the sleeping-whil ---truncated---

Database specific
{
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2022/50xxx/CVE-2022-50652.json",
    "cna_assigner": "Linux"
}
References

Affected packages

Git / git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Affected ranges

Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
b77fa964ecb1d72a671234f5bea95b41f77c233a
Fixed
9977cb7af5a8f4738198b020436e2e56c5cd721e
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
0151b03f43f2d295a6949454434074b34a262e06
Fixed
a323d24a0183be730d2398b11b3a91e5c2e222a0
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
ea6b7b1d58790ffb36bace723f6e62a1c8595c77
Fixed
ac5585bb06a2e82177269bee93e59887ce591106
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
750a95d63746458e86c6d92dfad48a05c64d0ecd
Fixed
eca77a25a7cb3201738f4b55b9b8fa1089d7d002
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
b74351287d4bd90636c3f48bc188c2f53824c2d4
Fixed
9bf7a0b2b15cd12e15f7858072bd89933746de67
Fixed
79a4bdb6b9920134af1a4738a1fa36a0438cd905
Fixed
030b6c7bb1e4edebaee2b1e48fbcc9cd5998d51d
Fixed
ee180e867ce4b2f744799247b81050b3e5dd62cd
Fixed
9de255c461d1b3f0242b3ad1450c3323a3e00b34
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
0 Unknown introduced commit / All previous commits are affected
Last affected
4a117a1c581623d04bf09aa7455d8e7b66e8bb85
Last affected
1d52cd8b52876145b0f6344be95fc750e30d9ecb

Database specific

source
"https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2022-50652.json"

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
0Unknown introduced version / All previous versions are affected
Fixed
4.9.337
Type
ECOSYSTEM
Events
Introduced
4.10.0
Fixed
4.14.303
Type
ECOSYSTEM
Events
Introduced
4.15.0
Fixed
4.19.270
Type
ECOSYSTEM
Events
Introduced
4.20.0
Fixed
5.4.229
Type
ECOSYSTEM
Events
Introduced
5.5.0
Fixed
5.10.163
Type
ECOSYSTEM
Events
Introduced
5.6.0
Fixed
5.15.86
Type
ECOSYSTEM
Events
Introduced
5.11.0
Fixed
6.0.16
Type
ECOSYSTEM
Events
Introduced
5.16.0
Fixed
6.1.2

Database specific

source
"https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2022-50652.json"