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

CVE-2026-74325 (GCVE-0-2026-74325)

Vulnerability from cvelistv5 – Published: 2026-08-15 05:58 – Updated: 2026-08-17 05:45
VLAI
Title
wifi: mt76: use kfree_rcu for offchannel link in mt76_put_vif_phy_link
Summary
In the Linux kernel, the following vulnerability has been resolved: wifi: mt76: use kfree_rcu for offchannel link in mt76_put_vif_phy_link mt76_put_vif_phy_link() frees the offchannel mlink with plain kfree() after rcu_assign_pointer(NULL). However, rcu_assign_pointer only prevents future RCU readers from obtaining the pointer -- it does not wait for existing readers that already hold it via rcu_dereference. The TX datapath (e.g. mt7996_mac_write_txwi) dereferences mlink->wcid and mlink->idx under rcu_read_lock. If a TX softirq obtained the pointer via rcu_dereference just before the NULL assignment, it will dereference freed memory after the kfree. struct mt76_vif_link already contains an rcu_head field that is unused at this free site -- a developer oversight, since the adjacent kfree_rcu_mightsleep call for rx_sc in the same function shows the pattern was understood. Replace kfree(mlink) with kfree_rcu(mlink, rcu_head).
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: a8f424c1287cc79a06c21816658feea87dfcb83f , < c7a83899203ed36696a2d35ddd03c0f522874a63 (git)
Affected: a8f424c1287cc79a06c21816658feea87dfcb83f , < 50e700ac0edce72dee5c3a9755865d9423696ac7 (git)
Affected: a8f424c1287cc79a06c21816658feea87dfcb83f , < 7fae097aa9a56c30febf539d72ef3773165d3aa3 (git)
guessed Create a notification for this product.
Linux Linux Affected: 6.14
Unaffected: 0 , < 6.14 (semver)
Unaffected: 6.18.40 , ≤ 6.18.* (semver)
Unaffected: 7.1.5 , ≤ 7.1.* (semver)
Unaffected: 7.2 , ≤ * (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/net/wireless/mediatek/mt76/channel.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "c7a83899203ed36696a2d35ddd03c0f522874a63",
              "status": "affected",
              "version": "a8f424c1287cc79a06c21816658feea87dfcb83f",
              "versionType": "git"
            },
            {
              "lessThan": "50e700ac0edce72dee5c3a9755865d9423696ac7",
              "status": "affected",
              "version": "a8f424c1287cc79a06c21816658feea87dfcb83f",
              "versionType": "git"
            },
            {
              "lessThan": "7fae097aa9a56c30febf539d72ef3773165d3aa3",
              "status": "affected",
              "version": "a8f424c1287cc79a06c21816658feea87dfcb83f",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/net/wireless/mediatek/mt76/channel.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.14"
            },
            {
              "lessThan": "6.14",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.40",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.1.*",
              "status": "unaffected",
              "version": "7.1.5",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.2",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.40",
                  "versionStartIncluding": "6.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.1.5",
                  "versionStartIncluding": "6.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2",
                  "versionStartIncluding": "6.14",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nwifi: mt76: use kfree_rcu for offchannel link in mt76_put_vif_phy_link\n\nmt76_put_vif_phy_link() frees the offchannel mlink with plain kfree()\nafter rcu_assign_pointer(NULL). However, rcu_assign_pointer only prevents\nfuture RCU readers from obtaining the pointer -- it does not wait for\nexisting readers that already hold it via rcu_dereference.\n\nThe TX datapath (e.g. mt7996_mac_write_txwi) dereferences mlink-\u003ewcid\nand mlink-\u003eidx under rcu_read_lock. If a TX softirq obtained the pointer\nvia rcu_dereference just before the NULL assignment, it will dereference\nfreed memory after the kfree.\n\nstruct mt76_vif_link already contains an rcu_head field that is unused at\nthis free site -- a developer oversight, since the adjacent\nkfree_rcu_mightsleep call for rx_sc in the same function shows the\npattern was understood.\n\nReplace kfree(mlink) with kfree_rcu(mlink, rcu_head)."
        }
      ],
      "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 bug is reached only through local nl80211/genl paths (NL80211_CMD_REMAIN_ON_CHANNEL, CANCEL_REMAIN_ON_CHANNEL, TRIGGER_SCAN) that call mt76_put_vif_phy_link during ROC/scan teardown; remote WiFi frames cannot invoke this free path.\nAC:L - Exploitation is a race between ROC/scan completion freeing the offchannel mlink and the TX datapath still dereferencing it under RCU; an attacker with nl80211 access controls both sides by starting offchannel ops, queuing offchannel TX, and cancelling ROC concurrently.\nPR:L - Entry points require GENL_UNS_ADMIN_PERM (CAP_NET_ADMIN in the socket user namespace). Per CNA guidance this is Low because unprivileged users can obtain CAP_NET_ADMIN via user namespaces and drive ROC/scan on an mt76 multi-radio interface they control.\nUI:N - No victim interaction is required once the attacker can issue nl80211 ROC/scan commands and offchannel TX; exploitation does not depend on a user opening files, mounting filesystems, or clicking prompts.\nS:U - Impact is confined to kernel memory corruption and privilege escalation within the same OS security boundary; it does not cross VM, container, or IOMMU isolation boundaries on its own.\nC:H - This is a use-after-free of struct mt76_vif_link freed via kfree while TX paths such as mt7996_mac_write_txwi still rcu_dereference and read mlink fields; UAF enables heap grooming for arbitrary kernel memory disclosure.\nI:H - Freed mlink contents control TXWI fields (omac_idx, wmm_idx, band_idx, bss idx) passed to firmware DMA descriptors; UAF provides a practical path to corrupt kernel heap metadata and achieve arbitrary code execution.\nA:H - Dereferencing the freed offchannel_link in the TX worker/softirq path causes kernel oops or panic; UAF on a hot transmit path can crash multi-radio mt76 APs, routers, and client devices during P2P/scan offchannel operations."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-17T05:45:54.629Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/c7a83899203ed36696a2d35ddd03c0f522874a63"
        },
        {
          "url": "https://git.kernel.org/stable/c/50e700ac0edce72dee5c3a9755865d9423696ac7"
        },
        {
          "url": "https://git.kernel.org/stable/c/7fae097aa9a56c30febf539d72ef3773165d3aa3"
        }
      ],
      "title": "wifi: mt76: use kfree_rcu for offchannel link in mt76_put_vif_phy_link",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-74325",
    "datePublished": "2026-08-15T05:58:20.236Z",
    "dateReserved": "2026-08-15T05:44:03.884Z",
    "dateUpdated": "2026-08-17T05:45:54.629Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-74325",
      "date": "2026-09-15",
      "epss": "0.00127",
      "percentile": "0.02703"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-74325\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-08-15T06:22:33.130\",\"lastModified\":\"2026-08-17T06:19:26.923\",\"vulnStatus\":\"Received\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nwifi: mt76: use kfree_rcu for offchannel link in mt76_put_vif_phy_link\\n\\nmt76_put_vif_phy_link() frees the offchannel mlink with plain kfree()\\nafter rcu_assign_pointer(NULL). However, rcu_assign_pointer only prevents\\nfuture RCU readers from obtaining the pointer -- it does not wait for\\nexisting readers that already hold it via rcu_dereference.\\n\\nThe TX datapath (e.g. mt7996_mac_write_txwi) dereferences mlink-\u003ewcid\\nand mlink-\u003eidx under rcu_read_lock. If a TX softirq obtained the pointer\\nvia rcu_dereference just before the NULL assignment, it will dereference\\nfreed memory after the kfree.\\n\\nstruct mt76_vif_link already contains an rcu_head field that is unused at\\nthis free site -- a developer oversight, since the adjacent\\nkfree_rcu_mightsleep call for rx_sc in the same function shows the\\npattern was understood.\\n\\nReplace kfree(mlink) with kfree_rcu(mlink, rcu_head).\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"drivers/net/wireless/mediatek/mt76/channel.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"a8f424c1287cc79a06c21816658feea87dfcb83f\",\"lessThan\":\"c7a83899203ed36696a2d35ddd03c0f522874a63\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"a8f424c1287cc79a06c21816658feea87dfcb83f\",\"lessThan\":\"50e700ac0edce72dee5c3a9755865d9423696ac7\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"a8f424c1287cc79a06c21816658feea87dfcb83f\",\"lessThan\":\"7fae097aa9a56c30febf539d72ef3773165d3aa3\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"drivers/net/wireless/mediatek/mt76/channel.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"6.14\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"6.14\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.18.40\",\"lessThanOrEqual\":\"6.18.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.1.5\",\"lessThanOrEqual\":\"7.1.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.2\",\"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/50e700ac0edce72dee5c3a9755865d9423696ac7\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/7fae097aa9a56c30febf539d72ef3773165d3aa3\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/c7a83899203ed36696a2d35ddd03c0f522874a63\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}",
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-08-20T17:19:02+00:00",
      "cve": "CVE-2026-74325",
      "id": "CVE-2026-74325",
      "initial_release_date": "2026-08-15T00:00:00+00:00",
      "product_status:known_affected": "184",
      "product_status:known_not_affected": "90",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: wifi: mt76: use kfree_rcu for offchannel link in mt76_put_vif_phy_link",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-74325.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-08-28T00:58:45Z",
      "cve": "CVE-2026-74325",
      "id": "CVE-2026-74325",
      "initial_release_date": "2026-08-28T00:58:45Z",
      "product_status:known_not_affected": "290",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-74325",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-74325.json",
      "version": "2"
    }
  }
}



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…