CVE-2021-47494 (GCVE-0-2021-47494)
Vulnerability from cvelistv5
Published
2024-05-22 08:19
Modified
2026-08-05 08:48
Summary
In the Linux kernel, the following vulnerability has been resolved: cfg80211: fix management registrations locking The management registrations locking was broken, the list was locked for each wdev, but cfg80211_mgmt_registrations_update() iterated it without holding all the correct spinlocks, causing list corruption. Rather than trying to fix it with fine-grained locking, just move the lock to the wiphy/rdev (still need the list on each wdev), we already need to hold the wdev lock to change it, so there's no contention on the lock in any case. This trivially fixes the bug since we hold one wdev's lock already, and now will hold the lock that protects all lists.
Impacted products
Vendor Product Version
Linux Linux Version: 6cd536fe62ef58d7c4eac2da07ab0ed7fd19010d
Version: 6cd536fe62ef58d7c4eac2da07ab0ed7fd19010d
Version: 6cd536fe62ef58d7c4eac2da07ab0ed7fd19010d
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2021-47494",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2024-05-22T18:38:36.269063Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2024-06-04T17:15:18.041Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      },
      {
        "providerMetadata": {
          "dateUpdated": "2024-08-04T05:39:59.605Z",
          "orgId": "af854a3a-2127-422b-91ae-364da2661108",
          "shortName": "CVE"
        },
        "references": [
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/4c22227e39c7a0b4dab55617ee8d34d171fab8d4"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/3c897f39b71fe68f90599f6a45b5f7bf5618420e"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/09b1d5dc6ce1c9151777f6c4e128a59457704c97"
          }
        ],
        "title": "CVE Program Container"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "include/net/cfg80211.h",
            "net/wireless/core.c",
            "net/wireless/core.h",
            "net/wireless/mlme.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "4c22227e39c7a0b4dab55617ee8d34d171fab8d4",
              "status": "affected",
              "version": "6cd536fe62ef58d7c4eac2da07ab0ed7fd19010d",
              "versionType": "git"
            },
            {
              "lessThan": "3c897f39b71fe68f90599f6a45b5f7bf5618420e",
              "status": "affected",
              "version": "6cd536fe62ef58d7c4eac2da07ab0ed7fd19010d",
              "versionType": "git"
            },
            {
              "lessThan": "09b1d5dc6ce1c9151777f6c4e128a59457704c97",
              "status": "affected",
              "version": "6cd536fe62ef58d7c4eac2da07ab0ed7fd19010d",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "include/net/cfg80211.h",
            "net/wireless/core.c",
            "net/wireless/core.h",
            "net/wireless/mlme.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "5.8"
            },
            {
              "lessThan": "5.8",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.10.*",
              "status": "unaffected",
              "version": "5.10.77",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.14.*",
              "status": "unaffected",
              "version": "5.14.16",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "5.15",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.10.77",
                  "versionStartIncluding": "5.8",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.14.16",
                  "versionStartIncluding": "5.8",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.15",
                  "versionStartIncluding": "5.8",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ncfg80211: fix management registrations locking\n\nThe management registrations locking was broken, the list was\nlocked for each wdev, but cfg80211_mgmt_registrations_update()\niterated it without holding all the correct spinlocks, causing\nlist corruption.\n\nRather than trying to fix it with fine-grained locking, just\nmove the lock to the wiphy/rdev (still need the list on each\nwdev), we already need to hold the wdev lock to change it, so\nthere\u0027s no contention on the lock in any case. This trivially\nfixes the bug since we hold one wdev\u0027s lock already, and now\nwill hold the lock that protects all lists."
        }
      ],
      "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 triggered through local nl80211 Generic Netlink (NL80211_CMD_REGISTER_FRAME and socket close \u2192 cfg80211_mlme_unregister_socket), not by processing WiFi frames alone. Adjacent RX only walks lists under the correct per-wdev lock and does not create the cross-wdev writer race.\nAC:L - The attacker controls both sides of the race by registering management frames on multiple wdevs on the same wiphy and concurrently closing another nl80211 socket so unregister_socket mutates a list while update walks it unlocked. Virtual interfaces are creatable via NL80211_CMD_NEW_INTERFACE, so no external condition is required.\nPR:L - NL80211_CMD_REGISTER_FRAME uses GENL_UNS_ADMIN_PERM, which only requires CAP_NET_ADMIN in the socket netns user namespace, not init-namespace root. Per kernel CNA guidance, CAP_NET_ADMIN reachable via user namespaces scores as Low.\nUI:N - Exploitation needs no victim interaction; the attacker issues netlink registrations and closes sockets directly.\nS:U - Impact stays within the host kernel authority (local memory corruption / privilege escalation class). No VM, IOMMU, or sandbox boundary is crossed.\nC:H - cfg80211_mgmt_registrations_update() can read cfg80211_mgmt_registration objects on another wdev while unregister_socket concurrently list_del/kfree them, yielding a use-after-free. Per guidance, UAFs enable arbitrary kernel memory disclosure.\nI:H - Cross-wdev list corruption and UAF of attacker-influenced kmalloc registration objects can be turned into heap reuse and write primitives for control-flow hijacking. Per guidance, UAF/list corruption scores as High integrity impact.\nA:H - The same unlocked list walk versus concurrent mutation causes kernel oops/panic or hangs from corrupted list pointers, so availability impact is High even without full exploitation."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T08:48:04.885Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/4c22227e39c7a0b4dab55617ee8d34d171fab8d4"
        },
        {
          "url": "https://git.kernel.org/stable/c/3c897f39b71fe68f90599f6a45b5f7bf5618420e"
        },
        {
          "url": "https://git.kernel.org/stable/c/09b1d5dc6ce1c9151777f6c4e128a59457704c97"
        }
      ],
      "title": "cfg80211: fix management registrations locking",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2021-47494",
    "datePublished": "2024-05-22T08:19:42.083Z",
    "dateReserved": "2024-05-22T06:20:56.201Z",
    "dateUpdated": "2026-08-05T08:48:04.885Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "vulnrichment": {
      "containers": "{\"adp\": [{\"title\": \"CVE Program Container\", \"references\": [{\"url\": \"https://git.kernel.org/stable/c/4c22227e39c7a0b4dab55617ee8d34d171fab8d4\", \"tags\": [\"x_transferred\"]}, {\"url\": \"https://git.kernel.org/stable/c/3c897f39b71fe68f90599f6a45b5f7bf5618420e\", \"tags\": [\"x_transferred\"]}, {\"url\": \"https://git.kernel.org/stable/c/09b1d5dc6ce1c9151777f6c4e128a59457704c97\", \"tags\": [\"x_transferred\"]}], \"providerMetadata\": {\"orgId\": \"af854a3a-2127-422b-91ae-364da2661108\", \"shortName\": \"CVE\", \"dateUpdated\": \"2024-08-04T05:39:59.605Z\"}}, {\"metrics\": [{\"other\": {\"type\": \"ssvc\", \"content\": {\"id\": \"CVE-2021-47494\", \"role\": \"CISA Coordinator\", \"options\": [{\"Exploitation\": \"none\"}, {\"Automatable\": \"no\"}, {\"Technical Impact\": \"partial\"}], \"version\": \"2.0.3\", \"timestamp\": \"2024-05-22T18:38:36.269063Z\"}}}], \"providerMetadata\": {\"orgId\": \"134c704f-9b21-4f2e-91b3-4a467353bcc0\", \"shortName\": \"CISA-ADP\", \"dateUpdated\": \"2024-05-22T18:38:42.817Z\"}, \"title\": \"CISA ADP Vulnrichment\"}], \"cna\": {\"title\": \"cfg80211: fix management registrations locking\", \"metrics\": [{\"cvssV3_1\": {\"version\": \"3.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\"}, \"scenarios\": [{\"lang\": \"en\", \"value\": \"AV:L - The bug is triggered through local nl80211 Generic Netlink (NL80211_CMD_REGISTER_FRAME and socket close \\u2192 cfg80211_mlme_unregister_socket), not by processing WiFi frames alone. Adjacent RX only walks lists under the correct per-wdev lock and does not create the cross-wdev writer race.\\nAC:L - The attacker controls both sides of the race by registering management frames on multiple wdevs on the same wiphy and concurrently closing another nl80211 socket so unregister_socket mutates a list while update walks it unlocked. Virtual interfaces are creatable via NL80211_CMD_NEW_INTERFACE, so no external condition is required.\\nPR:L - NL80211_CMD_REGISTER_FRAME uses GENL_UNS_ADMIN_PERM, which only requires CAP_NET_ADMIN in the socket netns user namespace, not init-namespace root. Per kernel CNA guidance, CAP_NET_ADMIN reachable via user namespaces scores as Low.\\nUI:N - Exploitation needs no victim interaction; the attacker issues netlink registrations and closes sockets directly.\\nS:U - Impact stays within the host kernel authority (local memory corruption / privilege escalation class). No VM, IOMMU, or sandbox boundary is crossed.\\nC:H - cfg80211_mgmt_registrations_update() can read cfg80211_mgmt_registration objects on another wdev while unregister_socket concurrently list_del/kfree them, yielding a use-after-free. Per guidance, UAFs enable arbitrary kernel memory disclosure.\\nI:H - Cross-wdev list corruption and UAF of attacker-influenced kmalloc registration objects can be turned into heap reuse and write primitives for control-flow hijacking. Per guidance, UAF/list corruption scores as High integrity impact.\\nA:H - The same unlocked list walk versus concurrent mutation causes kernel oops/panic or hangs from corrupted list pointers, so availability impact is High even without full exploitation.\"}]}], \"affected\": [{\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"6cd536fe62ef58d7c4eac2da07ab0ed7fd19010d\", \"lessThan\": \"4c22227e39c7a0b4dab55617ee8d34d171fab8d4\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"6cd536fe62ef58d7c4eac2da07ab0ed7fd19010d\", \"lessThan\": \"3c897f39b71fe68f90599f6a45b5f7bf5618420e\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"6cd536fe62ef58d7c4eac2da07ab0ed7fd19010d\", \"lessThan\": \"09b1d5dc6ce1c9151777f6c4e128a59457704c97\", \"versionType\": \"git\"}], \"programFiles\": [\"include/net/cfg80211.h\", \"net/wireless/core.c\", \"net/wireless/core.h\", \"net/wireless/mlme.c\"], \"defaultStatus\": \"unaffected\"}, {\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"5.8\"}, {\"status\": \"unaffected\", \"version\": \"0\", \"lessThan\": \"5.8\", \"versionType\": \"semver\"}, {\"status\": \"unaffected\", \"version\": \"5.10.77\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"5.10.*\"}, {\"status\": \"unaffected\", \"version\": \"5.14.16\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"5.14.*\"}, {\"status\": \"unaffected\", \"version\": \"5.15\", \"versionType\": \"original_commit_for_fix\", \"lessThanOrEqual\": \"*\"}], \"programFiles\": [\"include/net/cfg80211.h\", \"net/wireless/core.c\", \"net/wireless/core.h\", \"net/wireless/mlme.c\"], \"defaultStatus\": \"affected\"}], \"references\": [{\"url\": \"https://git.kernel.org/stable/c/4c22227e39c7a0b4dab55617ee8d34d171fab8d4\"}, {\"url\": \"https://git.kernel.org/stable/c/3c897f39b71fe68f90599f6a45b5f7bf5618420e\"}, {\"url\": \"https://git.kernel.org/stable/c/09b1d5dc6ce1c9151777f6c4e128a59457704c97\"}], \"x_generator\": {\"engine\": \"bippy-1.2.0\"}, \"descriptions\": [{\"lang\": \"en\", \"value\": \"In the Linux kernel, the following vulnerability has been resolved:\\n\\ncfg80211: fix management registrations locking\\n\\nThe management registrations locking was broken, the list was\\nlocked for each wdev, but cfg80211_mgmt_registrations_update()\\niterated it without holding all the correct spinlocks, causing\\nlist corruption.\\n\\nRather than trying to fix it with fine-grained locking, just\\nmove the lock to the wiphy/rdev (still need the list on each\\nwdev), we already need to hold the wdev lock to change it, so\\nthere\u0027s no contention on the lock in any case. This trivially\\nfixes the bug since we hold one wdev\u0027s lock already, and now\\nwill hold the lock that protects all lists.\"}], \"cpeApplicability\": [{\"nodes\": [{\"negate\": false, \"cpeMatch\": [{\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"5.10.77\", \"versionStartIncluding\": \"5.8\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"5.14.16\", \"versionStartIncluding\": \"5.8\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"5.15\", \"versionStartIncluding\": \"5.8\"}], \"operator\": \"OR\"}]}], \"providerMetadata\": {\"orgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"shortName\": \"Linux\", \"dateUpdated\": \"2026-08-05T08:48:04.885Z\"}}}",
      "cveMetadata": "{\"cveId\": \"CVE-2021-47494\", \"state\": \"PUBLISHED\", \"dateUpdated\": \"2026-08-05T08:48:04.885Z\", \"dateReserved\": \"2024-05-22T06:20:56.201Z\", \"assignerOrgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"datePublished\": \"2024-05-22T08:19:42.083Z\", \"assignerShortName\": \"Linux\"}",
      "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…