All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-cve-announce@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@kernel.org>
Subject: CVE-2026-89901: media: airspy: use vb2_video_unregister_device() on disconnect to fix NULL deref
Date: Wed, 16 Sep 2026 11:30:31 +0100	[thread overview]
Message-ID: <2026091639-CVE-2026-89901-e7b6@gregkh> (raw)

From: Greg Kroah-Hartman <gregkh@kernel.org>

Description
===========

In the Linux kernel, the following vulnerability has been resolved:

media: airspy: use vb2_video_unregister_device() on disconnect to fix NULL deref

airspy_disconnect() clears s->udev under v4l2_lock, but
airspy_stop_streaming() unconditionally calls airspy_ctrl_msg() and
airspy_free_stream_bufs() afterwards. If a streaming user closes the
device after disconnect, stop_streaming() runs and dereferences the
NULL s->udev:

  airspy_stop_streaming()
    airspy_ctrl_msg(s, CMD_RECEIVER_MODE, 0, 0, NULL, 0)
      usb_sndctrlpipe(s->udev, 0)         /* NULL deref */
    airspy_free_stream_bufs(s)
      usb_free_coherent(s->udev, ...)     /* NULL deref */

The airspy driver uses vb2_fop_release() in its file_operations, so
replace video_unregister_device(&s->vdev) with
vb2_video_unregister_device(&s->vdev) and move it before clearing
s->udev. vb2_video_unregister_device() releases the vb2 queue, which
synchronously runs airspy_stop_streaming() if streaming is active, so
the URBs, coherent DMA stream buffers and the hardware stop control
message all execute while s->udev is still valid.

vb2_video_unregister_device() locks vdev->queue->lock (vb_queue_lock)
internally, and stop_streaming() locks v4l2_lock, so the previous outer
mutex_lock(&s->vb_queue_lock) / mutex_lock(&s->v4l2_lock) pair around
the unregister sequence would self-deadlock and has been removed. A
short v4l2_lock critical section around s->udev = NULL remains so any
ioctl path that still holds the file descriptor sees coherent state.

Issue identified by automated review of the INV-003 series at
https://sashiko.dev/

The Linux kernel CVE team has assigned CVE-2026-89901 to this issue.


Affected and fixed versions
===========================

	Issue introduced in 3.17 with commit 634fe5033951b80ef4b98d8f047cb1083d29170d and fixed in 5.10.270 with commit c9081e2655188d2d134a741aec837dc70439d505
	Issue introduced in 3.17 with commit 634fe5033951b80ef4b98d8f047cb1083d29170d and fixed in 5.15.221 with commit 75089cea32e5055773bd13116236d08fdc98678a
	Issue introduced in 3.17 with commit 634fe5033951b80ef4b98d8f047cb1083d29170d and fixed in 6.1.188 with commit 155d0378ae0d6305cc4840583a6b42d2d0595bff
	Issue introduced in 3.17 with commit 634fe5033951b80ef4b98d8f047cb1083d29170d and fixed in 6.6.157 with commit 6e4ea90fdc6608cd5fac342e146ab6ae15d430bc
	Issue introduced in 3.17 with commit 634fe5033951b80ef4b98d8f047cb1083d29170d and fixed in 6.12.110 with commit a9a8c37ddda9fa3687b142be9098e1c37b8faf35
	Issue introduced in 3.17 with commit 634fe5033951b80ef4b98d8f047cb1083d29170d and fixed in 6.18.51 with commit 297fee023f46d771a844520675692ea089d80d9d
	Issue introduced in 3.17 with commit 634fe5033951b80ef4b98d8f047cb1083d29170d and fixed in 7.2.5 with commit c6749ac8f59cc80eb1b2d52f167fdf13e12655cc
	Issue introduced in 3.17 with commit 634fe5033951b80ef4b98d8f047cb1083d29170d and fixed in 7.3-rc1 with commit 2f378dc45e685fc825d2dd08e7864666d6fcc009

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2026-89901
will be updated if fixes are backported, please check that for the most
up to date information about this issue.


Affected files
==============

The file(s) affected by this issue are:
	drivers/media/usb/airspy/airspy.c


Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/c9081e2655188d2d134a741aec837dc70439d505
	https://git.kernel.org/stable/c/75089cea32e5055773bd13116236d08fdc98678a
	https://git.kernel.org/stable/c/155d0378ae0d6305cc4840583a6b42d2d0595bff
	https://git.kernel.org/stable/c/6e4ea90fdc6608cd5fac342e146ab6ae15d430bc
	https://git.kernel.org/stable/c/a9a8c37ddda9fa3687b142be9098e1c37b8faf35
	https://git.kernel.org/stable/c/297fee023f46d771a844520675692ea089d80d9d
	https://git.kernel.org/stable/c/c6749ac8f59cc80eb1b2d52f167fdf13e12655cc
	https://git.kernel.org/stable/c/2f378dc45e685fc825d2dd08e7864666d6fcc009

                 reply	other threads:[~2026-09-16 10:38 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2026091639-CVE-2026-89901-e7b6@gregkh \
    --to=gregkh@linuxfoundation.org \
    --cc=cve@kernel.org \
    --cc=gregkh@kernel.org \
    --cc=linux-cve-announce@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.