This CVE reveals a structural flaw in the vb2 (video buffer 2) framework's design that has now manifested in at least two drivers. When rtl2832_sdr_start_streaming() fails, it must call vb2_buffer_done() on all buffers that vb2 queued before calling the function. The framework provides those buffers upfront, creating an implicit contract: if start_streaming returns an error, you must return the buffers. This contract is documented but entirely unenforced — no compiler warning, no static analysis rule, no runtime guard. The rtl2832_sdr driver had eight error paths (two early returns, six goto targets), and every single one omitted the buffer return. This is not a one-off mistake; it's what happens when an API imposes behavioral requirements without structural enforcement.
The same bug was fixed in uvcvideo two years ago (commit 4cf3b6fd54eb), proving this is a recurring pattern rather than an isolated error. Both fixes required inventing a cleanup function at the driver level — rtl2832_sdr_cleanup_queued_bufs() — rather than calling a framework primitive. This duplication is itself evidence of a framework gap: vb2 should provide a vb2_start_streaming_error() helper that drivers invoke on failure, atomically returning all queued buffers and making the correct behavior the default path.
What you should do: Audit every vb2 consumer driver in your kernel for start_streaming() implementations that lack vb2_buffer_done() calls on all error paths. Prioritize drivers in high-exposure contexts — camera drivers in video conferencing, streaming capture devices — where the error conditions are more likely to occur at runtime. The bug is latent in any driver that hasn't been touched since the uvcvideo fix landed, and without tooling enforcement, code review is the only current defense. Consider whether your kernel tree should carry a vb2-level helper rather than relying on each driver to implement this contract correctly by discipline alone.