{"id":5389,"date":"2026-09-04T18:47:48","date_gmt":"2026-09-04T10:47:48","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-68222"},"modified":"2026-09-04T18:47:48","modified_gmt":"2026-09-04T10:47:48","slug":"cve-2026-68222","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-68222","title":{"rendered":"CVE-2026-68222 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nmedia: msi2500: Retur"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>media: msi2500: Return queued buffers on start_streaming() failure<\/p>\n<p>The vb2 framework hands buffers to the driver via buf_queue() before<br \/>\ncalling start_streaming().  If start_streaming() returns an error<br \/>\nwithout first returning those buffers via vb2_buffer_done(),<br \/>\nvb2_start_streaming() fires WARN_ON(owned_by_drv_count) and the queued<br \/>\nbuffers leak.<\/p>\n<p>msi2500_start_streaming() had five error paths that all hit this trap<br \/>\nand were further tangled by ret-overwriting between calls:<\/p>\n<p>  &#8211; -ENODEV when the USB device was already disconnected<br \/>\n  &#8211; -ERESTARTSYS when mutex_lock_interruptible() was interrupted<br \/>\n  &#8211; msi2500_set_usb_adc() failure: ret was silently overwritten by<br \/>\n    the next call (msi2500_isoc_init), so the error was lost entirely<br \/>\n  &#8211; msi2500_isoc_init() failure: cleanup_queued_bufs was called, but<br \/>\n    the function then fell through to msi2500_ctrl_msg() and again<br \/>\n    masked the original error by overwriting ret<br \/>\n  &#8211; msi2500_ctrl_msg(CMD_START_STREAMING) failure: no cleanup at all,<br \/>\n    leaving isoc URBs submitted with no way for the driver to consume<br \/>\n    them<\/p>\n<p>Consolidate the error paths into a small goto chain.  Every failure<br \/>\nnow stops the function, drains the queued-buffer list, and returns<br \/>\nthe real error code.  The ctrl_msg failure path also rolls back the<br \/>\npreceding msi2500_isoc_init() via msi2500_isoc_cleanup() before<br \/>\nunlocking and draining.<\/p>\n<p>The cleanup helper takes a vb2_buffer_state argument so that the<br \/>\nstart_streaming error paths can pass VB2_BUF_STATE_QUEUED (as<br \/>\nexpected by userspace on start_streaming failure) while stop_streaming<br \/>\nkeeps its existing VB2_BUF_STATE_ERROR semantics.<\/p>\n<p>This mirrors the uvcvideo fix in commit 4cf3b6fd54eb (&#8220;media: uvcvideo:<br \/>\nReturn queued buffers on start_streaming() failure&#8221;).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>media: msi2500: Return queued buffers on start_streaming() failure<\/p>\n<p>The vb2 framework hands buffers to the driver via buf_queue() b<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-5389","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/5389","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=5389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}