CVE-2026-89741
largeDouble-free in Linux kernel V4L2 video device registration error path
The Linux kernel's V4L2 subsystem contains a double-free in __video_register_device(): a prior fix (commit 2a934fdb01db) added a put_device() call when device_register fails, but the V4L2 API contract requires drivers to call video_device_release() on registration failure, which kfree()s the same video_device struct that put_device() already freed. A local attacker with low privileges who can cause video_register_device() to fail (for example, by exhausting the resource needed for device registration) triggers the double free, which can corrupt kernel heap memory and potentially lead to privilege escalation or kernel code execution (CVSS 7.8, local, high C/I/A impact). Affected systems are those running kernel releases that contained the faulty commit 2a934fdb01db and that use V4L2 video drivers; the upstream resolution reverts the bad fix, trading the double-free for a small, benign memory leak. No public proof-of-concept or in-the-wild exploitation is known, and the maintainers note that device_register failures are themselves unlikely, making real-world exploitability limited.
What to do: Upgrade to a kernel that includes this revert (or a distro kernel package carrying it) as part of routine kernel patching — no urgent out-of-band action is warranted given no known exploitation and the low likelihood of device_register failing. As defense-in-depth, restrict untrusted local shell access, and consider blacklisting unused V4L2/video kernel modules on servers and appliances that don't need camera or capture device support. Watch for kernel oops/heap-corruption reports originating from video device registration paths as an indicator of probing.
| Linux kernel | Kernel releases containing commit 2a934fdb01db ("media: v4l2-dev: fix error handling in __video_register_device()") prior to this revert; exact version range no |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: Revert "media: v4l2-dev: fix error handling in __video_register_device()" This reverts commit 2a934fdb01db6458288fc9386d3d8ceba6dd551a. The intentions of that patch were good, but it doesn't work. The idea is that if device_register fails, you have to do a put_device to let the ref counter release resources. However, the V4L2 API says that if video_register_device() fails, then you have to call video_device_release(), which kfree()s the video_device struct. But the put_device() will already have freed the struct, so you end up in a double-free scenario. There is not really a good way of fixing this without breaking video_register_device() into two parts, one that initializes everything, and one that does the actual device_register, and then converting all V4L2 drivers to this new model. That is a massive job, and it is very unlikely that device_register will fail. So rather than ending up in a double-free scenario, just revert this patch, and in that case we'll have a small memory leak. Which is a lot more robust.
- Vector
- CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
In the news0 stories
No ingested article mentions this CVE yet.