GCVE Workshop - 22 September 2026 (14:00-18:00), Luxembourg Before The Vulnopticon Conference - Registration

CVE-2026-90030 (GCVE-0-2026-90030)

Vulnerability from cvelistv5 – Published: 2026-09-16 10:33 – Updated: 2026-09-16 14:41
VLAI
Title
usb: dwc3: clear forceRM when issuing EndTransfer
Summary
In the Linux kernel, the following vulnerability has been resolved: usb: dwc3: clear forceRM when issuing EndTransfer The forceRM bit of the DEPCMD register controls the behavior of the EndTransfer command used to stop an active transfer. Older DWC3 programming guide revisions recommended setting forceRM=1 when issuing EndTransfer. Newer programming guide revisions recommend issuing EndTransfer with forceRM cleared. With forceRM=1 on DWC_usb31 v2.00a and v2.10a controllers, a transfer aborted through the ep_dequeue path was observed to remain active after EndTransfer completion. A subsequent StartTransfer issued on the same endpoint triggered writes associated with the aborted transfer. This resulted in an SMMU fault because the transfer buffer had already been unmapped during EndTransfer command-completion cleanup. Using forceRM=0 eliminates the issue. Although older DWC3 programming guide revisions recommended setting forceRM=1, no issues are known from using forceRM=0. Clear forceRM when issuing EndTransfer to provide consistent EndTransfer behavior and align with newer programming guide recommendations.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 1e43c86d84fb0503e82a143e017f35421498fc1a , < 0afe5c31612de3d18cc6d16e616da4a48ba1e5a2 (git)
Affected: 1e43c86d84fb0503e82a143e017f35421498fc1a , < e01408ee52fe5cb2d0b43f47f359336af2b6c316 (git)
Affected: 1e43c86d84fb0503e82a143e017f35421498fc1a , < b58e6200450d350314db0ecda7d6d1bde3281e80 (git)
Affected: ab99c4be945724b032cc55e05c6738fe1d84bf70 (git)
Affected: 6.6.37 , < 6.7 (semver)
guessed Create a notification for this product.
Linux Linux Affected: 6.9
Unaffected: 0 , < 6.9 (semver)
Unaffected: 6.18.51 , ≤ 6.18.* (semver)
Unaffected: 7.2.5 , ≤ 7.2.* (semver)
Unaffected: 7.3-rc2 , ≤ * (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/usb/dwc3/ep0.c",
            "drivers/usb/dwc3/gadget.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "0afe5c31612de3d18cc6d16e616da4a48ba1e5a2",
              "status": "affected",
              "version": "1e43c86d84fb0503e82a143e017f35421498fc1a",
              "versionType": "git"
            },
            {
              "lessThan": "e01408ee52fe5cb2d0b43f47f359336af2b6c316",
              "status": "affected",
              "version": "1e43c86d84fb0503e82a143e017f35421498fc1a",
              "versionType": "git"
            },
            {
              "lessThan": "b58e6200450d350314db0ecda7d6d1bde3281e80",
              "status": "affected",
              "version": "1e43c86d84fb0503e82a143e017f35421498fc1a",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "ab99c4be945724b032cc55e05c6738fe1d84bf70",
              "versionType": "git"
            },
            {
              "lessThan": "6.7",
              "status": "affected",
              "version": "6.6.37",
              "versionType": "semver"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/usb/dwc3/ep0.c",
            "drivers/usb/dwc3/gadget.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.9"
            },
            {
              "lessThan": "6.9",
              "status": "unaffected",
              "version": "0",
              "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-rc2",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.51",
                  "versionStartIncluding": "6.9",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.5",
                  "versionStartIncluding": "6.9",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc2",
                  "versionStartIncluding": "6.9",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionStartIncluding": "6.6.37",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nusb: dwc3: clear forceRM when issuing EndTransfer\n\nThe forceRM bit of the DEPCMD register controls the behavior of the\nEndTransfer command used to stop an active transfer. Older DWC3\nprogramming guide revisions recommended setting forceRM=1 when\nissuing EndTransfer. Newer programming guide revisions recommend\nissuing EndTransfer with forceRM cleared.\n\nWith forceRM=1 on DWC_usb31 v2.00a and v2.10a controllers, a transfer\naborted through the ep_dequeue path was observed to remain active\nafter EndTransfer completion. A subsequent StartTransfer issued on the\nsame endpoint triggered writes associated with the aborted transfer.\nThis resulted in an SMMU fault because the transfer buffer had already\nbeen unmapped during EndTransfer command-completion cleanup.\n\nUsing forceRM=0 eliminates the issue. Although older DWC3 programming\nguide revisions recommended setting forceRM=1, no issues are known\nfrom using forceRM=0. Clear forceRM when issuing EndTransfer to provide\nconsistent EndTransfer behavior and align with newer programming guide\nrecommendations."
        }
      ],
      "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 documented trigger is dwc3_gadget_ep_dequeue(), reached from FunctionFS via usb_ep_dequeue() on ordinary local syscalls (interrupted read, aio_cancel, close, FUNCTIONFS_DMABUF_DETACH) rather than USB host packet parsing; this matches AV:L used for other f_fs/dwc3 EndXfer bugs (CVE-2024-36977, CVE-2024-36894).\nAC:L - On affected DWC_usb31 controllers the attacker deterministically queues a request, dequeues it so EndTransfer runs with forceRM=1, then queues again so StartTransfer replays DMA to the already-unmapped buffer; no uncontrolled race is involved, and v2.00a/v2.10a hardware is common on Qualcomm phones and embedded boards.\nPR:L - FunctionFS endpoint nodes are routinely delegated to unprivileged gadget daemons (adbd/shell, MTP) via uid=/gid=/fmode=; queue, cancel, and re-queue are ordinary file operations and the dequeue path performs no capability check.\nUI:N - The attacking process performs the queue, dequeue, and re-queue itself; a USB cable being attached is an ambient condition of phones, kiosks, and embedded gadgets, not a separate victim action the attacker must induce.\nS:U - Stale controller DMA targets the transfer buffer the gadget had already mapped in the same kernel; this is not a VM escape or IOMMU-domain bypass, and an SMMU, when present, faults the access rather than being circumvented.\nC:H - The same EndTransfer forceRM mishandling applies to IN endpoints, so after unmap the still-active transfer can DMA-read reused pages onto the USB bus; per kernel UAF guidance this memory-corruption primitive also yields kernel disclosure once backing pages are reallocated.\nI:H - The issue was reproduced as stale DMA writes on an OUT bulk endpoint into a buffer already unmapped during EndTransfer completion cleanup, so leftover or host-supplied data is written into reallocated kernel pages, a DMA use-after-free write primitive suitable for control-flow hijacking.\nA:H - The commit reports an SMMU fault when the controller accesses the already-unmapped transfer buffer, which panics or wedges the USB/IOMMU path; without an IOMMU the same DMA use-after-free likewise oopses or panics the kernel."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-16T14:41:44.818Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/0afe5c31612de3d18cc6d16e616da4a48ba1e5a2"
        },
        {
          "url": "https://git.kernel.org/stable/c/e01408ee52fe5cb2d0b43f47f359336af2b6c316"
        },
        {
          "url": "https://git.kernel.org/stable/c/b58e6200450d350314db0ecda7d6d1bde3281e80"
        }
      ],
      "title": "usb: dwc3: clear forceRM when issuing EndTransfer",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-90030",
    "datePublished": "2026-09-16T10:33:31.801Z",
    "dateReserved": "2026-09-11T19:38:34.782Z",
    "dateUpdated": "2026-09-16T14:41:44.818Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-90030\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-09-16T11:17:16.070\",\"lastModified\":\"2026-09-16T15:18:26.160\",\"vulnStatus\":\"Received\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nusb: dwc3: clear forceRM when issuing EndTransfer\\n\\nThe forceRM bit of the DEPCMD register controls the behavior of the\\nEndTransfer command used to stop an active transfer. Older DWC3\\nprogramming guide revisions recommended setting forceRM=1 when\\nissuing EndTransfer. Newer programming guide revisions recommend\\nissuing EndTransfer with forceRM cleared.\\n\\nWith forceRM=1 on DWC_usb31 v2.00a and v2.10a controllers, a transfer\\naborted through the ep_dequeue path was observed to remain active\\nafter EndTransfer completion. A subsequent StartTransfer issued on the\\nsame endpoint triggered writes associated with the aborted transfer.\\nThis resulted in an SMMU fault because the transfer buffer had already\\nbeen unmapped during EndTransfer command-completion cleanup.\\n\\nUsing forceRM=0 eliminates the issue. Although older DWC3 programming\\nguide revisions recommended setting forceRM=1, no issues are known\\nfrom using forceRM=0. Clear forceRM when issuing EndTransfer to provide\\nconsistent EndTransfer behavior and align with newer programming guide\\nrecommendations.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"drivers/usb/dwc3/ep0.c\",\"drivers/usb/dwc3/gadget.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"1e43c86d84fb0503e82a143e017f35421498fc1a\",\"lessThan\":\"0afe5c31612de3d18cc6d16e616da4a48ba1e5a2\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"1e43c86d84fb0503e82a143e017f35421498fc1a\",\"lessThan\":\"e01408ee52fe5cb2d0b43f47f359336af2b6c316\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"1e43c86d84fb0503e82a143e017f35421498fc1a\",\"lessThan\":\"b58e6200450d350314db0ecda7d6d1bde3281e80\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"ab99c4be945724b032cc55e05c6738fe1d84bf70\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"6.6.37\",\"lessThan\":\"6.7\",\"versionType\":\"semver\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"drivers/usb/dwc3/ep0.c\",\"drivers/usb/dwc3/gadget.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"6.9\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"6.9\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.18.51\",\"lessThanOrEqual\":\"6.18.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.2.5\",\"lessThanOrEqual\":\"7.2.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.3-rc2\",\"lessThanOrEqual\":\"*\",\"versionType\":\"original_commit_for_fix\",\"status\":\"unaffected\"}]}]}],\"metrics\":{\"cvssMetricV31\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"type\":\"Secondary\",\"cvssData\":{\"version\":\"3.1\",\"vectorString\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H\",\"baseScore\":7.8,\"baseSeverity\":\"HIGH\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"HIGH\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":5.9}]},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/0afe5c31612de3d18cc6d16e616da4a48ba1e5a2\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/b58e6200450d350314db0ecda7d6d1bde3281e80\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/e01408ee52fe5cb2d0b43f47f359336af2b6c316\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}"
  }
}



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…

Detection rules are retrieved from Rulezet.

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…