Description
In the Linux kernel, the following vulnerability has been resolved: staging: most: video: avoid double free on video register failure comp_register_videodev() allocates a video_device with video_device_alloc() and releases it if video_register_device() fails. This can double free the video_device when __video_register_device() reaches device_register() and that call fails: video_register_device() -> __video_register_device() -> device_register() fails -> put_device(&vdev->dev) -> v4l2_device_release() -> vdev->release(vdev) -> video_device_release(vdev) comp_register_videodev() -> video_device_release(mdev->vdev) Use video_device_release_empty() while registering the device so that registration failure paths do not free mdev->vdev through vdev->release(). comp_register_videodev() then releases mdev->vdev exactly once on failure. Restore video_device_release() after successful registration so the registered device keeps its normal lifetime handling. This issue was found by a static analysis tool I am developing.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
eab231c0398a91fbd294672bfe9e0ff45b368246 to < 009d58b73500d0b49f6ae3833f8afcb0ebd9ddbbaffectedeab231c0398a91fbd294672bfe9e0ff45b368246 to < 430ad4ea06a0767fb44a08e2212ceb3a996607eeaffectedeab231c0398a91fbd294672bfe9e0ff45b368246 to < 46ea51f5b2ee1a3b40c05b7c750cbc5cabe94062affectedeab231c0398a91fbd294672bfe9e0ff45b368246 to < 4928096212b78262dbbeab3b3abf2352278ce22daffectedeab231c0398a91fbd294672bfe9e0ff45b368246 to < 80ed79787da3311f76b4d71d0ce7ab992a9e134daffectedeab231c0398a91fbd294672bfe9e0ff45b368246 to < 43078449ad6236d839e4d707954d2e36b10a6706affectedeab231c0398a91fbd294672bfe9e0ff45b368246 to < 7fc162453cfb7b8e93edb16287a84ba0130cac38affectedeab231c0398a91fbd294672bfe9e0ff45b368246 to < 7cb1c5b32a2bfde961fff8d5204526b609bcb30aaffected
Linux Linux
Default version status: affected
4.9affected0 to < 4.9unaffected5.10.261 to ≤ 5.10.*unaffected5.15.212 to ≤ 5.15.*unaffected6.1.178 to ≤ 6.1.*unaffected6.6.145 to ≤ 6.6.*unaffected6.12.97 to ≤ 6.12.*unaffected6.18.40 to ≤ 6.18.*unaffected7.1.5 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/009d58b73500d0b49f6ae3833f8afcb0ebd9ddbb ↗
- https://git.kernel.org/stable/c/430ad4ea06a0767fb44a08e2212ceb3a996607ee ↗
- https://git.kernel.org/stable/c/46ea51f5b2ee1a3b40c05b7c750cbc5cabe94062 ↗
- https://git.kernel.org/stable/c/4928096212b78262dbbeab3b3abf2352278ce22d ↗
- https://git.kernel.org/stable/c/80ed79787da3311f76b4d71d0ce7ab992a9e134d ↗
- https://git.kernel.org/stable/c/43078449ad6236d839e4d707954d2e36b10a6706 ↗
- https://git.kernel.org/stable/c/7fc162453cfb7b8e93edb16287a84ba0130cac38 ↗
- https://git.kernel.org/stable/c/7cb1c5b32a2bfde961fff8d5204526b609bcb30a ↗