CVE-2025-23151 (GCVE-0-2025-23151)
Vulnerability from cvelistv5
Published
2025-05-01 12:55
Modified
2026-08-05 11:57
Summary
In the Linux kernel, the following vulnerability has been resolved: bus: mhi: host: Fix race between unprepare and queue_buf A client driver may use mhi_unprepare_from_transfer() to quiesce incoming data during the client driver's tear down. The client driver might also be processing data at the same time, resulting in a call to mhi_queue_buf() which will invoke mhi_gen_tre(). If mhi_gen_tre() runs after mhi_unprepare_from_transfer() has torn down the channel, a panic will occur due to an invalid dereference leading to a page fault. This occurs because mhi_gen_tre() does not verify the channel state after locking it. Fix this by having mhi_gen_tre() confirm the channel state is valid, or return error to avoid accessing deinitialized data. [mani: added stable tag]
Impacted products
Vendor Product Version
Linux Linux Version: 176ed1727badd2fad2158e2b214dcbc24f4be7a1
Version: 0b093176fd0967a5f56e2c86b0d48247f6c0fa0f
Version: ce16274a6b8d1483d0d8383272deb2bfd1b577ca
Version: b89b6a863dd53bc70d8e52d50f9cfaef8ef5e9c9
Version: b89b6a863dd53bc70d8e52d50f9cfaef8ef5e9c9
Version: b89b6a863dd53bc70d8e52d50f9cfaef8ef5e9c9
Version: b89b6a863dd53bc70d8e52d50f9cfaef8ef5e9c9
Version: 642adb03541673f3897f64bbb62856ffd73807f5
Version: 5.15.149   
Version: 6.1.76   
Version: 6.6.15   
Version: 6.7.3   
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "providerMetadata": {
          "dateUpdated": "2025-11-03T19:42:48.368Z",
          "orgId": "af854a3a-2127-422b-91ae-364da2661108",
          "shortName": "CVE"
        },
        "references": [
          {
            "url": "https://lists.debian.org/debian-lts-announce/2025/05/msg00045.html"
          }
        ],
        "title": "CVE Program Container"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/bus/mhi/host/main.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "899d0353ea69681f474b6bc9de32c663b89672da",
              "status": "affected",
              "version": "176ed1727badd2fad2158e2b214dcbc24f4be7a1",
              "versionType": "git"
            },
            {
              "lessThan": "3e7ecf181cbdde9753204ada3883ca1704d8702b",
              "status": "affected",
              "version": "0b093176fd0967a5f56e2c86b0d48247f6c0fa0f",
              "versionType": "git"
            },
            {
              "lessThan": "5f084993c90d9d0b4a52a349ede5120f992a7ca1",
              "status": "affected",
              "version": "ce16274a6b8d1483d0d8383272deb2bfd1b577ca",
              "versionType": "git"
            },
            {
              "lessThan": "a77955f7704b2a00385e232cbcc1cb06b5c7a425",
              "status": "affected",
              "version": "b89b6a863dd53bc70d8e52d50f9cfaef8ef5e9c9",
              "versionType": "git"
            },
            {
              "lessThan": "178e5657c8fd285125cc6743a81b513bce099760",
              "status": "affected",
              "version": "b89b6a863dd53bc70d8e52d50f9cfaef8ef5e9c9",
              "versionType": "git"
            },
            {
              "lessThan": "ee1fce83ed56450087309b9b74ad9bcb2b010fa6",
              "status": "affected",
              "version": "b89b6a863dd53bc70d8e52d50f9cfaef8ef5e9c9",
              "versionType": "git"
            },
            {
              "lessThan": "0686a818d77a431fc3ba2fab4b46bbb04e8c9380",
              "status": "affected",
              "version": "b89b6a863dd53bc70d8e52d50f9cfaef8ef5e9c9",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "642adb03541673f3897f64bbb62856ffd73807f5",
              "versionType": "git"
            },
            {
              "lessThan": "5.15.181",
              "status": "affected",
              "version": "5.15.149",
              "versionType": "semver"
            },
            {
              "lessThan": "6.1.135",
              "status": "affected",
              "version": "6.1.76",
              "versionType": "semver"
            },
            {
              "lessThan": "6.6.88",
              "status": "affected",
              "version": "6.6.15",
              "versionType": "semver"
            },
            {
              "lessThan": "6.8",
              "status": "affected",
              "version": "6.7.3",
              "versionType": "semver"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/bus/mhi/host/main.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.8"
            },
            {
              "lessThan": "6.8",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.15.*",
              "status": "unaffected",
              "version": "5.15.181",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.135",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.88",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.24",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.13.*",
              "status": "unaffected",
              "version": "6.13.12",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.14.*",
              "status": "unaffected",
              "version": "6.14.3",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.15",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.15.181",
                  "versionStartIncluding": "5.15.149",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.135",
                  "versionStartIncluding": "6.1.76",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.88",
                  "versionStartIncluding": "6.6.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.24",
                  "versionStartIncluding": "6.8",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.13.12",
                  "versionStartIncluding": "6.8",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.14.3",
                  "versionStartIncluding": "6.8",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.15",
                  "versionStartIncluding": "6.8",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionStartIncluding": "6.7.3",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nbus: mhi: host: Fix race between unprepare and queue_buf\n\nA client driver may use mhi_unprepare_from_transfer() to quiesce\nincoming data during the client driver\u0027s tear down. The client driver\nmight also be processing data at the same time, resulting in a call to\nmhi_queue_buf() which will invoke mhi_gen_tre(). If mhi_gen_tre() runs\nafter mhi_unprepare_from_transfer() has torn down the channel, a panic\nwill occur due to an invalid dereference leading to a page fault.\n\nThis occurs because mhi_gen_tre() does not verify the channel state\nafter locking it. Fix this by having mhi_gen_tre() confirm the channel\nstate is valid, or return error to avoid accessing deinitialized data.\n\n[mani: added stable tag]"
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The vulnerable `mhi_gen_tre()` is reached only through local client-driver data paths \u2014 AF_QIPCRTR `sendmsg()` via net/qrtr/mhi.c, `write()` on /dev/wwan* via mhi_wwan_ctrl, WWAN netdev transmit via mhi_net, or DRM manage ioctls on /dev/accel/accelN \u2014 all of which require local code execution. No remote peer or network packet can drive the host-side queueing path or the teardown that creates the condition.\nAC:L - The attacker fully controls the queueing side of the race and can hammer it in a tight loop, and because `mhi_deinit_chan_ctxt()` leaves `buf_ring-\u003ewp`/`tre_ring-\u003ewp` dangling while neither `mhi_queue()` nor `mhi_gen_tre()` gates on `ch_state`, every queue call issued after teardown hits the freed memory rather than only one landing in a narrow window. Teardown events (runtime/system suspend via `qcom_mhi_qrtr_pm_suspend_late()`, subsystem restart, PCIe function reset, driver unbind) recur routinely on the affected phone, laptop, and accelerator platforms, and no unusual kernel configuration is needed.\nPR:L - Creating an AF_QIPCRTR socket and sending on it requires no capability at all (`qrtr_create()` in net/qrtr/af_qrtr.c has no permission check), and ordinary application traffic routed over a WWAN interface reaches `mhi_ndo_xmit()` \u2192 `mhi_queue_skb()`; on QAIC accelerator hosts the manage ioctl is available to any user holding the render/accel node. Only basic unprivileged local access is needed \u2014 no root and no capability.\nUI:N - The attacker\u0027s own process drives the queueing path continuously, and the teardown side runs asynchronously in driver/PM/error-recovery context. No victim action such as mounting a filesystem or opening a file is involved.\nS:U - The use-after-free reads and writes corrupt kernel heap (vmalloc) and freed DMA-coherent memory within the same kernel security authority. No VM, IOMMU, or sandbox boundary is crossed.\nC:H - This is a use-after-free: `buf_info = buf_ring-\u003ewp` dereferences a `vfree()`d region and `WARN_ON(buf_info-\u003eused)` plus the subsequent `map_single()` consume attacker-groomable freed-memory contents, and `buf_info-\u003ep_addr`/`cb_buf` read back out of that reclaimed allocation flow into the TRE and into the client driver\u0027s completion callback. Per UAF guidance this gives an attacker leverage over freed object contents and thus high confidentiality impact.\nI:H - `mhi_gen_tre()` writes an entire `struct mhi_buf_info` (v_addr, cb_buf, wp, dir, attacker-chosen len) into the `vfree()`d ring and a 16-byte TRE into the `dma_free_coherent()`d, device-visible ring \u2014 a use-after-free write with partially attacker-controlled content into memory the allocator may have handed to another subsystem or another device\u0027s DMA buffer. `mhi_ring_chan_db()` then programs the hardware doorbell to point at that freed DMA region, letting the device itself DMA into reclaimed memory.\nA:H - The fix commit states outright that the race causes \"a panic ... due to an invalid dereference leading to a page fault\"; additionally `mhi_add_ring_element()` latches both ring `wp` pointers to NULL once `base` is NULL, and `mhi_ring_chan_db()` dereferences the NULL `ctxt_wp`, so subsequent queue calls oops deterministically. Any kernel crash is High."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T11:57:05.078Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/899d0353ea69681f474b6bc9de32c663b89672da"
        },
        {
          "url": "https://git.kernel.org/stable/c/3e7ecf181cbdde9753204ada3883ca1704d8702b"
        },
        {
          "url": "https://git.kernel.org/stable/c/5f084993c90d9d0b4a52a349ede5120f992a7ca1"
        },
        {
          "url": "https://git.kernel.org/stable/c/a77955f7704b2a00385e232cbcc1cb06b5c7a425"
        },
        {
          "url": "https://git.kernel.org/stable/c/178e5657c8fd285125cc6743a81b513bce099760"
        },
        {
          "url": "https://git.kernel.org/stable/c/ee1fce83ed56450087309b9b74ad9bcb2b010fa6"
        },
        {
          "url": "https://git.kernel.org/stable/c/0686a818d77a431fc3ba2fab4b46bbb04e8c9380"
        }
      ],
      "title": "bus: mhi: host: Fix race between unprepare and queue_buf",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2025-23151",
    "datePublished": "2025-05-01T12:55:38.833Z",
    "dateReserved": "2025-01-11T14:28:41.513Z",
    "dateUpdated": "2026-08-05T11:57:05.078Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2"
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.


Loading…

Loading…