LiveActive security incident?Get immediate response
CVE Record

CVE-2022-50652: uio: uio_dmem_genirq: Fix missing unlock in irq configuration

In the Linux kernel, the following vulnerability has been resolved: uio: uio_dmem_genirq: Fix missing unlock in irq configuration Commit b74351287d4b ("uio: fix a sleep-in-atomic-context bug in uio_dmem_genirq_irqcontrol()") started calling disable_irq() 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: uio_dmem_genirq uio myfpga(OE) bochs drm_vram_helper drm_ttm_helper ttm drm_kms_helper drm snd_pcm ppdev joydev psmouse snd_timer snd e1000fb_sys_fops syscopyarea parport sysfillrect soundcore sysimgblt input_leds pcspkr i2c_piix4 serio_raw floppy evbug qemu_fw_cfg mac_hid pata_acpi ip_tables x_tables autofs4 [last unloaded: parport_pc] [ 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] dump_stack_lvl+0x4d/0x67 [ 14.856325] dump_stack+0x14/0x1a [ 14.856583] __schedule_bug.cold+0x4b/0x5c [ 14.856915] __schedule+0xe81/0x13d0 [ 14.857199] ? idr_find+0x13/0x20 [ 14.857456] ? get_work_pool+0x2d/0x50 [ 14.857756] ? __flush_work+0x233/0x280 [ 14.858068] ? __schedule+0xa95/0x13d0 [ 14.858307] ? idr_find+0x13/0x20 [ 14.858519] ? get_work_pool+0x2d/0x50 [ 14.858798] schedule+0x6c/0x100 [ 14.859009] schedule_hrtimeout_range_clock+0xff/0x110 [ 14.859335] ? tty_write_room+0x1f/0x30 [ 14.859598] ? n_tty_poll+0x1ec/0x220 [ 14.859830] ? tty_ldisc_deref+0x1a/0x20 [ 14.860090] schedule_hrtimeout_range+0x17/0x20 [ 14.860373] do_select+0x596/0x840 [ 14.860627] ? __kernel_text_address+0x16/0x50 [ 14.860954] ? poll_freewait+0xb0/0xb0 [ 14.861235] ? poll_freewait+0xb0/0xb0 [ 14.861517] ? rpm_resume+0x49d/0x780 [ 14.861798] ? common_interrupt+0x59/0xa0 [ 14.862127] ? asm_common_interrupt+0x2b/0x40 [ 14.862511] ? __uart_start.isra.0+0x61/0x70 [ 14.862902] ? __check_object_size+0x61/0x280 [ 14.863255] core_sys_select+0x1c6/0x400 [ 14.863575] ? vfs_write+0x1c9/0x3d0 [ 14.863853] ? vfs_write+0x1c9/0x3d0 [ 14.864121] ? _copy_from_user+0x45/0x70 [ 14.864526] do_pselect.constprop.0+0xb3/0xf0 [ 14.864893] ? do_syscall_64+0x6d/0x90 [ 14.865228] ? do_syscall_64+0x6d/0x90 [ 14.865556] __x64_sys_pselect6+0x76/0xa0 [ 14.865906] do_syscall_64+0x60/0x90 [ 14.866214] ? syscall_exit_to_user_mode+0x2a/0x50 [ 14.866640] ? do_syscall_64+0x6d/0x90 [ 14.866972] ? do_syscall_64+0x6d/0x90 [ 14.867286] ? do_syscall_64+0x6d/0x90 [ 14.867626] entry_SYSCALL_64_after_hwframe+0x63/0xcd [...] stripped [ 14.872959] </TASK> ('myfpga' is a simple 'uio_dmem_genirq' driver I wrote to test this) The implementation of "uio_dmem_genirq" was based on "uio_pdrv_genirq" and it is used in a similar manner to the "uio_pdrv_genirq" driver with respect to interrupt configuration and handling. At the time "uio_dmem_genirq" was introduced, both had the same implementation of the 'uio_info' handlers irqcontrol() and handler(). Then commit 34cb27528398 ("UIO: Fix concurrency issue"), which was only applied to "uio_pdrv_genirq", ended up making them a little different. That commit, among other things, changed disable_irq() to disable_irq_nosync() 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 disable_irq() to disable_irq_nosync() in irqcontrol(), we also avoid the sleeping-whil ---truncated---

UnknownCVSS not scoredNot KEV-listedUpdated
Glexia's TakeAutomated analysismoderate

Security readout for executives and security teams

Plain-English summary

CVE-2022-50652 is a Linux kernel bug in the uio_dmem_genirq driver. A repeated interrupt-disable request can leave a spinlock locked, causing kernel warnings and potential local denial-of-service behavior on systems using this UIO driver. Exposure is likely limited to systems that load this driver and expose /dev/uio devices.

Executive priority

Treat as targeted operational risk, not an internet-scale emergency. Prioritize embedded or hardware-interface systems where UIO devices are exposed to local users or applications.

Technical view

The flaw is a missing unlock path in uio_dmem_genirq_irqcontrol(). A prior change avoided calling disable_irq() while holding a spinlock, but introduced a path where an already-disabled interrupt receives another disable request and the spinlock is not released. The kernel fix aligns behavior with uio_pdrv_genirq by using disable_irq_nosync() and correcting locking.

Likely exposure

Most general-purpose Linux systems are unlikely to be exposed unless uio_dmem_genirq is loaded and /dev/uio devices are accessible. Embedded, industrial, FPGA, or custom hardware platforms using UIO drivers should prioritize review.

Exploitation context

The source bundle shows a local trigger through /dev/uio0 writes in a test setup. There is no KEV listing and no cited evidence of active exploitation. Practical risk depends on local access to the relevant UIO device and driver deployment.

Researcher notes

The public record lacks CVSS and CWE data. The provided description identifies the affected subsystem and locking failure, with multiple stable kernel commit references. Confirm exact affected and fixed version ranges through vendor kernel advisories because downstream kernels may backport patches.

Mitigation direction

  • Update to a vendor kernel containing the referenced upstream stable fixes.
  • Check Linux distribution advisories for backported fixes.
  • Disable or unload uio_dmem_genirq if it is not required.
  • Restrict /dev/uio device access to trusted users only.
  • Monitor kernel logs for scheduling-while-atomic or UIO-related warnings.

Validation and detection

  • Inventory kernels and compare against vendor fixed builds.
  • Check whether uio_dmem_genirq is present or loaded.
  • Review permissions and ownership on /dev/uio* devices.
  • Confirm the relevant stable patch is present in kernel source or changelog.
  • Review dmesg for UIO irqcontrol-related warnings.
Prepared
Confidence
medium
Sources
11

Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.

Potential ATT&CK relevance

Conservative CVE-to-ATT&CK context

These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.

ATT&CK lookup starting points

Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.

cve · low confidence lookup

CVE-2022-50652 mapping review

Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.

Open ATT&CK lookup
Vulnerability profileCVE Program record
Severity
Unknown
CVSS
Not scored
Known Exploited
No
Published
Official CVE source material

CNA and ADP enrichment extracted from CVE v5

These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.

0CVSS vectors
0Timeline events
0ADP providers
10Source links

CVSS and timeline data

No CVSS vectors or timeline events were available in the normalized CVE source material.

Affected products

Products and packages named in the record

VendorProductVersion / packageStatus
LinuxLinuxb77fa964ecb1d72a671234f5bea95b41f77c233a, 0151b03f43f2d295a6949454434074b34a262e06, ea6b7b1d58790ffb36bace723f6e62a1c8595c77, 750a95d63746458e86c6d92dfad48a05c64d0ecd, b74351287d4bd90636c3f48bc188c2f53824c2d4, b74351287d4bd90636c3f48bc188c2f53824c2d4, b74351287d4bd90636c3f48bc188c2f53824c2d4, b74351287d4bd90636c3f48bc188c2f53824c2d4, b74351287d4bd90636c3f48bc188c2f53824c2d4, 4a117a1c581623d04bf09aa7455d8e7b66e8bb85, 1d52cd8b52876145b0f6344be95fc750e30d9ecbunaffected
LinuxLinux5.6, 0, 4.9.337, 4.14.303, 4.19.270, 5.4.229, 5.10.163, 5.15.86, 6.0.16, 6.1.2, 6.2affected
Weakness

CWE details

No CWE listed

CWE links open Glexia weakness intelligence pages with official CWE context, developer remediation guidance, and related CVE mappings.