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

CVE-2026-90022 (GCVE-0-2026-90022)

Vulnerability from cvelistv5 – Published: 2026-09-16 10:33 – Updated: 2026-09-16 14:41
VLAI
Title
usb: gadget: f_midi2: fix use-after-free in string attribute show path
Summary
In the Linux kernel, the following vulnerability has been resolved: usb: gadget: f_midi2: fix use-after-free in string attribute show path f_midi2_opts_str_show() takes the string lock internally, but its callers dereference the opts->info.<field> pointer before calling it, outside the lock. This races with f_midi2_opts_str_store(), which frees the old string under opts->lock when the attribute is written concurrently, the show path can read a pointer that gets freed before the lock inside str_show() is even taken. Change f_midi2_opts_str_show() to take a pointer to the string field, matching the existing pattern in f_midi2_opts_str_store(), and dereference it only after the lock is held. Update all three callers (iface_name, block name, and the EP string option macro) accordingly.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 , < f9bdf4c4f6410a1dfafafa383a0e21069372657f (git)
Affected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 , < d11f3300b39e2daad2f0d9d66ddcc39a156cb594 (git)
Affected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 , < e89e30f0b5d3004fe5955250bd8b04f3733e32ce (git)
Affected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 , < 49fab5e1bdb205c36c965d0e9677bc40d282d3a2 (git)
Affected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 , < fed0aa7c6eaedc6c0d4e362fc91724aa47be4a7b (git)
Affected: 0 , < 6.6.157 (semver)
Affected: 0 , < 6.12.110 (semver)
Affected: 0 , < 6.18.51 (semver)
Affected: 0 , < 7.2.5 (semver)
guessed Create a notification for this product.
Linux Linux 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-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/gadget/function/f_midi2.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "f9bdf4c4f6410a1dfafafa383a0e21069372657f",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "d11f3300b39e2daad2f0d9d66ddcc39a156cb594",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "e89e30f0b5d3004fe5955250bd8b04f3733e32ce",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "49fab5e1bdb205c36c965d0e9677bc40d282d3a2",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "fed0aa7c6eaedc6c0d4e362fc91724aa47be4a7b",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "6.6.157",
              "status": "affected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThan": "6.12.110",
              "status": "affected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThan": "6.18.51",
              "status": "affected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThan": "7.2.5",
              "status": "affected",
              "version": "0",
              "versionType": "semver"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/usb/gadget/function/f_midi2.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "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-rc2",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.157",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.110",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.51",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.5",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc2",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nusb: gadget: f_midi2: fix use-after-free in string attribute show path\n\nf_midi2_opts_str_show() takes the string lock internally, but its\ncallers dereference the opts-\u003einfo.\u003cfield\u003e pointer before calling it,\noutside the lock. This races with f_midi2_opts_str_store(), which\nfrees the old string under opts-\u003elock when the attribute is written\nconcurrently, the show path can read a pointer that gets freed\nbefore the lock inside str_show() is even taken.\n\nChange f_midi2_opts_str_show() to take a pointer to the string field,\nmatching the existing pattern in f_midi2_opts_str_store(), and\ndereference it only after the lock is held. Update all three callers\n(iface_name, block name, and the EP string option macro) accordingly."
        }
      ],
      "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 UAF is reached by concurrent local read/write of midi2 configfs string attributes (iface_name, ep_name, product_id, block name) under /sys/kernel/config/usb_gadget/\u003cg\u003e/functions/midi2.*; no USB host packets, cable, or UDC bind are required, matching other gadget configfs bugs scored Local rather than Physical.\nAC:L - The attacker controls both sides by opening the same attribute on two fds (configfs serializes only per-fd) and racing show against store; store kfree()s the prior kstrndup string under opts-\u003elock while show already holds the stale pointer, and the function need not be bound (store fails only if refcnt != 0).\nPR:L - gadgets_make(), function_make(), and the midi2 show/store handlers perform no capable() check; access is gated only by configfs DAC, and Android/embedded USB gadget HALs routinely chown /sys/kernel/config/usb_gadget to non-root system or daemon accounts.\nUI:N - The attacker creates the midi2 function instance and performs the concurrent attribute read/write themselves; configfs is typically already mounted at /sys/kernel/config, and no victim mount, cable plug, or other-user action is required.\nS:U - The use-after-free of the configfs kstrndup string corrupts kernel heap within the same host kernel security authority; this is not a VM escape, sandbox breakout, or IOMMU/DMA boundary bypass.\nC:H - Callers load opts-\u003einfo.\u003cfield\u003e outside the lock, then f_midi2_opts_str_show() scnprintfs that pointer after a concurrent store kfree()d it; reclaiming the kmalloc object lets the attacker control the bytes copied to userspace, a UAF disclosure primitive.\nI:H - The same UAF of the kstrndup string, with store spraying attacker-chosen size and content into the same slab, is a classic heap use-after-free that can be converted into overlapping objects, arbitrary write, and control-flow hijack.\nA:H - scnprintf() of the freed string after kfree() reliably produces a KASAN slab-use-after-free oops or kernel panic, which the attacker can retrigger with further concurrent show/store loops."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-16T14:41:38.817Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/f9bdf4c4f6410a1dfafafa383a0e21069372657f"
        },
        {
          "url": "https://git.kernel.org/stable/c/d11f3300b39e2daad2f0d9d66ddcc39a156cb594"
        },
        {
          "url": "https://git.kernel.org/stable/c/e89e30f0b5d3004fe5955250bd8b04f3733e32ce"
        },
        {
          "url": "https://git.kernel.org/stable/c/49fab5e1bdb205c36c965d0e9677bc40d282d3a2"
        },
        {
          "url": "https://git.kernel.org/stable/c/fed0aa7c6eaedc6c0d4e362fc91724aa47be4a7b"
        }
      ],
      "title": "usb: gadget: f_midi2: fix use-after-free in string attribute show path",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-90022",
    "datePublished": "2026-09-16T10:33:26.238Z",
    "dateReserved": "2026-09-11T19:38:34.781Z",
    "dateUpdated": "2026-09-16T14:41:38.817Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-90022\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-09-16T11:17:15.140\",\"lastModified\":\"2026-09-16T15:18:25.657\",\"vulnStatus\":\"Received\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nusb: gadget: f_midi2: fix use-after-free in string attribute show path\\n\\nf_midi2_opts_str_show() takes the string lock internally, but its\\ncallers dereference the opts-\u003einfo.\u003cfield\u003e pointer before calling it,\\noutside the lock. This races with f_midi2_opts_str_store(), which\\nfrees the old string under opts-\u003elock when the attribute is written\\nconcurrently, the show path can read a pointer that gets freed\\nbefore the lock inside str_show() is even taken.\\n\\nChange f_midi2_opts_str_show() to take a pointer to the string field,\\nmatching the existing pattern in f_midi2_opts_str_store(), and\\ndereference it only after the lock is held. Update all three callers\\n(iface_name, block name, and the EP string option macro) accordingly.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"drivers/usb/gadget/function/f_midi2.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2\",\"lessThan\":\"f9bdf4c4f6410a1dfafafa383a0e21069372657f\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2\",\"lessThan\":\"d11f3300b39e2daad2f0d9d66ddcc39a156cb594\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2\",\"lessThan\":\"e89e30f0b5d3004fe5955250bd8b04f3733e32ce\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2\",\"lessThan\":\"49fab5e1bdb205c36c965d0e9677bc40d282d3a2\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2\",\"lessThan\":\"fed0aa7c6eaedc6c0d4e362fc91724aa47be4a7b\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"6.6.157\",\"versionType\":\"semver\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"6.12.110\",\"versionType\":\"semver\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"6.18.51\",\"versionType\":\"semver\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"7.2.5\",\"versionType\":\"semver\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"drivers/usb/gadget/function/f_midi2.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"6.6.157\",\"lessThanOrEqual\":\"6.6.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.12.110\",\"lessThanOrEqual\":\"6.12.*\",\"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/49fab5e1bdb205c36c965d0e9677bc40d282d3a2\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/d11f3300b39e2daad2f0d9d66ddcc39a156cb594\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/e89e30f0b5d3004fe5955250bd8b04f3733e32ce\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/f9bdf4c4f6410a1dfafafa383a0e21069372657f\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/fed0aa7c6eaedc6c0d4e362fc91724aa47be4a7b\",\"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…