{"id":24568,"date":"2026-09-16T20:32:29","date_gmt":"2026-09-16T12:32:29","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89881"},"modified":"2026-09-16T20:32:29","modified_gmt":"2026-09-16T12:32:29","slug":"cve-2026-89881","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89881","title":{"rendered":"CVE-2026-89881 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nmedia: rtl2832_sdr: u"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>media: rtl2832_sdr: use vb2_video_unregister_device() on remove to fix DMA leak<\/p>\n<p>rtl2832_sdr_remove() runs on USB disconnect and clears dev-&gt;udev to<br \/>\nNULL before any pending streaming teardown has run. When user space<br \/>\nlater closes its file descriptor, vb2 calls rtl2832_sdr_stop_streaming()<br \/>\nwhich in turn calls rtl2832_sdr_free_stream_bufs(). That helper releases<br \/>\neach coherent buffer with:<\/p>\n<p>    usb_free_coherent(dev-&gt;udev, dev-&gt;buf_size,<br \/>\n                      dev-&gt;buf_list[dev-&gt;buf_num],<br \/>\n                      dev-&gt;dma_addr[dev-&gt;buf_num]);<\/p>\n<p>usb_free_coherent() returns immediately when its dev argument is NULL,<br \/>\nso every DMA stream buffer that was live at disconnect is silently<br \/>\nleaked. The URBs allocated in rtl2832_sdr_alloc_urbs() outlive the<br \/>\ndevice for the same reason.<\/p>\n<p>The rtl2832_sdr driver uses vb2_fop_release() in its file_operations,<br \/>\nso replace video_unregister_device(&amp;dev-&gt;vdev) with<br \/>\nvb2_video_unregister_device(&amp;dev-&gt;vdev) and move it before clearing<br \/>\ndev-&gt;udev. vb2_video_unregister_device() releases the vb2 queue, which<br \/>\nsynchronously runs rtl2832_sdr_stop_streaming() if streaming is active,<br \/>\nso URBs and coherent DMA stream buffers are freed while dev-&gt;udev is<br \/>\nstill valid.<\/p>\n<p>vb2_video_unregister_device() locks vdev-&gt;queue-&gt;lock (vb_queue_lock)<br \/>\ninternally, and stop_streaming() locks v4l2_lock, so the previous outer<br \/>\nmutex_lock(&amp;dev-&gt;vb_queue_lock) \/ mutex_lock(&amp;dev-&gt;v4l2_lock) pair<br \/>\naround the unregister sequence would self-deadlock and has been removed.<br \/>\nA short v4l2_lock critical section around dev-&gt;udev = NULL remains so<br \/>\nany ioctl path that still holds the file descriptor sees coherent state.<\/p>\n<p>Issue identified by automated review of the INV-003 series at<br \/>\nhttps:\/\/sashiko.dev\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>media: rtl2832_sdr: use vb2_video_unregister_device() on remove to fix DMA leak<\/p>\n<p>rtl2832_sdr_remove() runs on USB disconnect and cl<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-24568","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/24568","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=24568"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=24568"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=24568"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}