CVE-2026-89901 (GCVE-0-2026-89901)

Vulnerability from cvelistv5 – Published: 2026-09-16 10:32 – Updated: 2026-09-16 10:32
VLAI
Title
media: airspy: use vb2_video_unregister_device() on disconnect to fix NULL deref
Summary
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/
Severity
No CVSS data available.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 634fe5033951b80ef4b98d8f047cb1083d29170d , < c9081e2655188d2d134a741aec837dc70439d505 (git)
Affected: 634fe5033951b80ef4b98d8f047cb1083d29170d , < 75089cea32e5055773bd13116236d08fdc98678a (git)
Affected: 634fe5033951b80ef4b98d8f047cb1083d29170d , < 155d0378ae0d6305cc4840583a6b42d2d0595bff (git)
Affected: 634fe5033951b80ef4b98d8f047cb1083d29170d , < 6e4ea90fdc6608cd5fac342e146ab6ae15d430bc (git)
Affected: 634fe5033951b80ef4b98d8f047cb1083d29170d , < a9a8c37ddda9fa3687b142be9098e1c37b8faf35 (git)
Affected: 634fe5033951b80ef4b98d8f047cb1083d29170d , < 297fee023f46d771a844520675692ea089d80d9d (git)
Affected: 634fe5033951b80ef4b98d8f047cb1083d29170d , < c6749ac8f59cc80eb1b2d52f167fdf13e12655cc (git)
Affected: 634fe5033951b80ef4b98d8f047cb1083d29170d , < 2f378dc45e685fc825d2dd08e7864666d6fcc009 (git)
guessed Create a notification for this product.
Linux Linux Affected: 3.17
Unaffected: 0 , < 3.17 (semver)
Unaffected: 5.10.270 , ≤ 5.10.* (semver)
Unaffected: 5.15.221 , ≤ 5.15.* (semver)
Unaffected: 6.1.188 , ≤ 6.1.* (semver)
Unaffected: 6.6.157 , ≤ 6.6.* (semver)
Unaffected: 6.12.110 , ≤ 6.12.* (semver)
Unaffected: 6.18.51 , ≤ 6.18.* (semver)
Unaffected: 7.2.5 , ≤ 7.2.* (semver)
Unaffected: 7.3-rc1 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/media/usb/airspy/airspy.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "c9081e2655188d2d134a741aec837dc70439d505",
              "status": "affected",
              "version": "634fe5033951b80ef4b98d8f047cb1083d29170d",
              "versionType": "git"
            },
            {
              "lessThan": "75089cea32e5055773bd13116236d08fdc98678a",
              "status": "affected",
              "version": "634fe5033951b80ef4b98d8f047cb1083d29170d",
              "versionType": "git"
            },
            {
              "lessThan": "155d0378ae0d6305cc4840583a6b42d2d0595bff",
              "status": "affected",
              "version": "634fe5033951b80ef4b98d8f047cb1083d29170d",
              "versionType": "git"
            },
            {
              "lessThan": "6e4ea90fdc6608cd5fac342e146ab6ae15d430bc",
              "status": "affected",
              "version": "634fe5033951b80ef4b98d8f047cb1083d29170d",
              "versionType": "git"
            },
            {
              "lessThan": "a9a8c37ddda9fa3687b142be9098e1c37b8faf35",
              "status": "affected",
              "version": "634fe5033951b80ef4b98d8f047cb1083d29170d",
              "versionType": "git"
            },
            {
              "lessThan": "297fee023f46d771a844520675692ea089d80d9d",
              "status": "affected",
              "version": "634fe5033951b80ef4b98d8f047cb1083d29170d",
              "versionType": "git"
            },
            {
              "lessThan": "c6749ac8f59cc80eb1b2d52f167fdf13e12655cc",
              "status": "affected",
              "version": "634fe5033951b80ef4b98d8f047cb1083d29170d",
              "versionType": "git"
            },
            {
              "lessThan": "2f378dc45e685fc825d2dd08e7864666d6fcc009",
              "status": "affected",
              "version": "634fe5033951b80ef4b98d8f047cb1083d29170d",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/media/usb/airspy/airspy.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "3.17"
            },
            {
              "lessThan": "3.17",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.10.*",
              "status": "unaffected",
              "version": "5.10.270",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.15.*",
              "status": "unaffected",
              "version": "5.15.221",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.188",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.157",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.110",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.51",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.5",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3-rc1",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.10.270",
                  "versionStartIncluding": "3.17",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.15.221",
                  "versionStartIncluding": "3.17",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.188",
                  "versionStartIncluding": "3.17",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.157",
                  "versionStartIncluding": "3.17",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.110",
                  "versionStartIncluding": "3.17",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.51",
                  "versionStartIncluding": "3.17",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.5",
                  "versionStartIncluding": "3.17",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc1",
                  "versionStartIncluding": "3.17",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nmedia: airspy: use vb2_video_unregister_device() on disconnect to fix NULL deref\n\nairspy_disconnect() clears s-\u003eudev under v4l2_lock, but\nairspy_stop_streaming() unconditionally calls airspy_ctrl_msg() and\nairspy_free_stream_bufs() afterwards. If a streaming user closes the\ndevice after disconnect, stop_streaming() runs and dereferences the\nNULL s-\u003eudev:\n\n  airspy_stop_streaming()\n    airspy_ctrl_msg(s, CMD_RECEIVER_MODE, 0, 0, NULL, 0)\n      usb_sndctrlpipe(s-\u003eudev, 0)         /* NULL deref */\n    airspy_free_stream_bufs(s)\n      usb_free_coherent(s-\u003eudev, ...)     /* NULL deref */\n\nThe airspy driver uses vb2_fop_release() in its file_operations, so\nreplace video_unregister_device(\u0026s-\u003evdev) with\nvb2_video_unregister_device(\u0026s-\u003evdev) and move it before clearing\ns-\u003eudev. vb2_video_unregister_device() releases the vb2 queue, which\nsynchronously runs airspy_stop_streaming() if streaming is active, so\nthe URBs, coherent DMA stream buffers and the hardware stop control\nmessage all execute while s-\u003eudev is still valid.\n\nvb2_video_unregister_device() locks vdev-\u003equeue-\u003elock (vb_queue_lock)\ninternally, and stop_streaming() locks v4l2_lock, so the previous outer\nmutex_lock(\u0026s-\u003evb_queue_lock) / mutex_lock(\u0026s-\u003ev4l2_lock) pair around\nthe unregister sequence would self-deadlock and has been removed. A\nshort v4l2_lock critical section around s-\u003eudev = NULL remains so any\nioctl path that still holds the file descriptor sees coherent state.\n\nIssue identified by automated review of the INV-003 series at\nhttps://sashiko.dev/"
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-16T10:32:00.997Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/c9081e2655188d2d134a741aec837dc70439d505"
        },
        {
          "url": "https://git.kernel.org/stable/c/75089cea32e5055773bd13116236d08fdc98678a"
        },
        {
          "url": "https://git.kernel.org/stable/c/155d0378ae0d6305cc4840583a6b42d2d0595bff"
        },
        {
          "url": "https://git.kernel.org/stable/c/6e4ea90fdc6608cd5fac342e146ab6ae15d430bc"
        },
        {
          "url": "https://git.kernel.org/stable/c/a9a8c37ddda9fa3687b142be9098e1c37b8faf35"
        },
        {
          "url": "https://git.kernel.org/stable/c/297fee023f46d771a844520675692ea089d80d9d"
        },
        {
          "url": "https://git.kernel.org/stable/c/c6749ac8f59cc80eb1b2d52f167fdf13e12655cc"
        },
        {
          "url": "https://git.kernel.org/stable/c/2f378dc45e685fc825d2dd08e7864666d6fcc009"
        }
      ],
      "title": "media: airspy: use vb2_video_unregister_device() on disconnect to fix NULL deref",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-89901",
    "datePublished": "2026-09-16T10:32:00.997Z",
    "dateReserved": "2026-09-11T19:38:34.774Z",
    "dateUpdated": "2026-09-16T10:32:00.997Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-89901",
      "date": "2026-09-25",
      "epss": "0.0021",
      "percentile": "0.10073"
    },
    "microsoft_vex": {
      "current_release_date": "2026-09-24T01:39:07.000Z",
      "cve": "CVE-2026-89901",
      "id": "msrc_CVE-2026-89901",
      "initial_release_date": "2026-09-17T01:07:37.000Z",
      "product_status:fixed": "1",
      "product_status:known_affected": "2",
      "source": "Microsoft CSAF VEX",
      "status": "final",
      "title": "media: airspy: use vb2_video_unregister_device() on disconnect to fix NULL deref",
      "url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-89901.json",
      "version": "4"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "drivers/media/usb/airspy/airspy.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "c9081e2655188d2d134a741aec837dc70439d505",
                    "status": "affected",
                    "version": "634fe5033951b80ef4b98d8f047cb1083d29170d",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "75089cea32e5055773bd13116236d08fdc98678a",
                    "status": "affected",
                    "version": "634fe5033951b80ef4b98d8f047cb1083d29170d",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "155d0378ae0d6305cc4840583a6b42d2d0595bff",
                    "status": "affected",
                    "version": "634fe5033951b80ef4b98d8f047cb1083d29170d",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "6e4ea90fdc6608cd5fac342e146ab6ae15d430bc",
                    "status": "affected",
                    "version": "634fe5033951b80ef4b98d8f047cb1083d29170d",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "a9a8c37ddda9fa3687b142be9098e1c37b8faf35",
                    "status": "affected",
                    "version": "634fe5033951b80ef4b98d8f047cb1083d29170d",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "297fee023f46d771a844520675692ea089d80d9d",
                    "status": "affected",
                    "version": "634fe5033951b80ef4b98d8f047cb1083d29170d",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "c6749ac8f59cc80eb1b2d52f167fdf13e12655cc",
                    "status": "affected",
                    "version": "634fe5033951b80ef4b98d8f047cb1083d29170d",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "2f378dc45e685fc825d2dd08e7864666d6fcc009",
                    "status": "affected",
                    "version": "634fe5033951b80ef4b98d8f047cb1083d29170d",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "drivers/media/usb/airspy/airspy.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "3.17"
                  },
                  {
                    "lessThan": "3.17",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "5.10.*",
                    "status": "unaffected",
                    "version": "5.10.270",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "5.15.*",
                    "status": "unaffected",
                    "version": "5.15.221",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.1.*",
                    "status": "unaffected",
                    "version": "6.1.188",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.6.*",
                    "status": "unaffected",
                    "version": "6.6.157",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.12.*",
                    "status": "unaffected",
                    "version": "6.12.110",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.18.*",
                    "status": "unaffected",
                    "version": "6.18.51",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "7.2.*",
                    "status": "unaffected",
                    "version": "7.2.5",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.3-rc1",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nmedia: airspy: use vb2_video_unregister_device() on disconnect to fix NULL deref\n\nairspy_disconnect() clears s-\u003eudev under v4l2_lock, but\nairspy_stop_streaming() unconditionally calls airspy_ctrl_msg() and\nairspy_free_stream_bufs() afterwards. If a streaming user closes the\ndevice after disconnect, stop_streaming() runs and dereferences the\nNULL s-\u003eudev:\n\n  airspy_stop_streaming()\n    airspy_ctrl_msg(s, CMD_RECEIVER_MODE, 0, 0, NULL, 0)\n      usb_sndctrlpipe(s-\u003eudev, 0)         /* NULL deref */\n    airspy_free_stream_bufs(s)\n      usb_free_coherent(s-\u003eudev, ...)     /* NULL deref */\n\nThe airspy driver uses vb2_fop_release() in its file_operations, so\nreplace video_unregister_device(\u0026s-\u003evdev) with\nvb2_video_unregister_device(\u0026s-\u003evdev) and move it before clearing\ns-\u003eudev. vb2_video_unregister_device() releases the vb2 queue, which\nsynchronously runs airspy_stop_streaming() if streaming is active, so\nthe URBs, coherent DMA stream buffers and the hardware stop control\nmessage all execute while s-\u003eudev is still valid.\n\nvb2_video_unregister_device() locks vdev-\u003equeue-\u003elock (vb_queue_lock)\ninternally, and stop_streaming() locks v4l2_lock, so the previous outer\nmutex_lock(\u0026s-\u003evb_queue_lock) / mutex_lock(\u0026s-\u003ev4l2_lock) pair around\nthe unregister sequence would self-deadlock and has been removed. A\nshort v4l2_lock critical section around s-\u003eudev = NULL remains so any\nioctl path that still holds the file descriptor sees coherent state.\n\nIssue identified by automated review of the INV-003 series at\nhttps://sashiko.dev/"
          }
        ],
        "id": "CVE-2026-89901",
        "lastModified": "2026-09-16T11:16:59.003",
        "metrics": {},
        "published": "2026-09-16T11:16:59.003",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/155d0378ae0d6305cc4840583a6b42d2d0595bff"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/297fee023f46d771a844520675692ea089d80d9d"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/2f378dc45e685fc825d2dd08e7864666d6fcc009"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/6e4ea90fdc6608cd5fac342e146ab6ae15d430bc"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/75089cea32e5055773bd13116236d08fdc98678a"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/a9a8c37ddda9fa3687b142be9098e1c37b8faf35"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/c6749ac8f59cc80eb1b2d52f167fdf13e12655cc"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/c9081e2655188d2d134a741aec837dc70439d505"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…