CVE-2024-39496 (GCVE-0-2024-39496)
Vulnerability from cvelistv5
Published
2024-07-12 12:20
Modified
2026-08-05 11:33
Summary
In the Linux kernel, the following vulnerability has been resolved: btrfs: zoned: fix use-after-free due to race with dev replace While loading a zone's info during creation of a block group, we can race with a device replace operation and then trigger a use-after-free on the device that was just replaced (source device of the replace operation). This happens because at btrfs_load_zone_info() we extract a device from the chunk map into a local variable and then use the device while not under the protection of the device replace rwsem. So if there's a device replace operation happening when we extract the device and that device is the source of the replace operation, we will trigger a use-after-free if before we finish using the device the replace operation finishes and frees the device. Fix this by enlarging the critical section under the protection of the device replace rwsem so that all uses of the device are done inside the critical section.
Impacted products
Vendor Product Version
Linux Linux Version: 5b316468983dfa9473ff0f1c42e4e30b4c267141
Version: 5b316468983dfa9473ff0f1c42e4e30b4c267141
Version: 5b316468983dfa9473ff0f1c42e4e30b4c267141
Version: 5b316468983dfa9473ff0f1c42e4e30b4c267141
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "providerMetadata": {
          "dateUpdated": "2025-11-03T21:56:14.179Z",
          "orgId": "af854a3a-2127-422b-91ae-364da2661108",
          "shortName": "CVE"
        },
        "references": [
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/17765964703b88d8befd899f8501150bb7e07e43"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/092571ef9a812566c8f2c9038d9c2a64c49788d6"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/a0cc006f4214b87e70983c692e05bb36c59b5752"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/0090d6e1b210551e63cf43958dc7a1ec942cdde9"
          },
          {
            "url": "https://lists.debian.org/debian-lts-announce/2025/01/msg00001.html"
          }
        ],
        "title": "CVE Program Container"
      },
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2024-39496",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2024-09-10T17:07:26.275755Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2024-09-11T17:34:39.782Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "fs/btrfs/zoned.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "17765964703b88d8befd899f8501150bb7e07e43",
              "status": "affected",
              "version": "5b316468983dfa9473ff0f1c42e4e30b4c267141",
              "versionType": "git"
            },
            {
              "lessThan": "092571ef9a812566c8f2c9038d9c2a64c49788d6",
              "status": "affected",
              "version": "5b316468983dfa9473ff0f1c42e4e30b4c267141",
              "versionType": "git"
            },
            {
              "lessThan": "a0cc006f4214b87e70983c692e05bb36c59b5752",
              "status": "affected",
              "version": "5b316468983dfa9473ff0f1c42e4e30b4c267141",
              "versionType": "git"
            },
            {
              "lessThan": "0090d6e1b210551e63cf43958dc7a1ec942cdde9",
              "status": "affected",
              "version": "5b316468983dfa9473ff0f1c42e4e30b4c267141",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "fs/btrfs/zoned.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "5.11"
            },
            {
              "lessThan": "5.11",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.95",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.35",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.9.*",
              "status": "unaffected",
              "version": "6.9.6",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.10",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.95",
                  "versionStartIncluding": "5.11",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.35",
                  "versionStartIncluding": "5.11",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.9.6",
                  "versionStartIncluding": "5.11",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.10",
                  "versionStartIncluding": "5.11",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nbtrfs: zoned: fix use-after-free due to race with dev replace\n\nWhile loading a zone\u0027s info during creation of a block group, we can race\nwith a device replace operation and then trigger a use-after-free on the\ndevice that was just replaced (source device of the replace operation).\n\nThis happens because at btrfs_load_zone_info() we extract a device from\nthe chunk map into a local variable and then use the device while not\nunder the protection of the device replace rwsem. So if there\u0027s a device\nreplace operation happening when we extract the device and that device\nis the source of the replace operation, we will trigger a use-after-free\nif before we finish using the device the replace operation finishes and\nfrees the device.\n\nFix this by enlarging the critical section under the protection of the\ndevice replace rwsem so that all uses of the device are done inside the\ncritical section."
        }
      ],
      "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 path is entered through ordinary local filesystem activity (write/create syscalls forcing chunk allocation on a mounted zoned btrfs); no network or adjacent-network interface is involved.\nAC:L - The attacker drives the block-group-creation side of the race continuously and at will, and the window is unusually wide because the reader blocks in report-zones I/O holding the stale device pointer while the freeing side runs synchronize_rcu() before kfree(), so repeated attempts yield reliable success once a replace is in flight.\nPR:L - No capability is checked anywhere on the btrfs_chunk_alloc \u2192 btrfs_create_chunk \u2192 btrfs_make_block_group \u2192 btrfs_load_zone_info path; any unprivileged local user with write access to the zoned btrfs mount can force new block group creation and execute the use-after-free.\nUI:N - The attacker triggers the vulnerable code entirely through their own filesystem writes; no victim must open a file, click anything, or otherwise interact.\nS:U - The corruption occurs in kernel memory and is exploited by a local user against the same kernel; there is no crossing into a different security authority such as a hypervisor or IOMMU boundary.\nC:H - The freed struct btrfs_device is dereferenced for bdev, name and zone_info, and test_bit() reads through the freed zone_info-\u003eseq_zones bitmap; after reclaiming the kmalloc\u0027d object with sprayed data this yields an attacker-directed kernel memory read.\nI:H - btrfs_dev_clear_zone_empty() performs a __clear_bit() write through zone_info-\u003eempty_zones with both the base pointer and the bit index shift read out of the freed object, giving a controlled write primitive suitable for privilege escalation.\nA:H - Even without successful reclaim, dereferencing the freed device and issuing blkdev_report_zones() on a closed block device oopses the kernel inside a transaction, panicking the system or forcing the filesystem read-only."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T11:33:45.997Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/17765964703b88d8befd899f8501150bb7e07e43"
        },
        {
          "url": "https://git.kernel.org/stable/c/092571ef9a812566c8f2c9038d9c2a64c49788d6"
        },
        {
          "url": "https://git.kernel.org/stable/c/a0cc006f4214b87e70983c692e05bb36c59b5752"
        },
        {
          "url": "https://git.kernel.org/stable/c/0090d6e1b210551e63cf43958dc7a1ec942cdde9"
        }
      ],
      "title": "btrfs: zoned: fix use-after-free due to race with dev replace",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2024-39496",
    "datePublished": "2024-07-12T12:20:31.669Z",
    "dateReserved": "2024-06-25T14:23:23.751Z",
    "dateUpdated": "2026-08-05T11:33:45.997Z",
    "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/17765964703b88d8befd899f8501150bb7e07e43\", \"tags\": [\"x_transferred\"]}, {\"url\": \"https://git.kernel.org/stable/c/092571ef9a812566c8f2c9038d9c2a64c49788d6\", \"tags\": [\"x_transferred\"]}, {\"url\": \"https://git.kernel.org/stable/c/a0cc006f4214b87e70983c692e05bb36c59b5752\", \"tags\": [\"x_transferred\"]}, {\"url\": \"https://git.kernel.org/stable/c/0090d6e1b210551e63cf43958dc7a1ec942cdde9\", \"tags\": [\"x_transferred\"]}, {\"url\": \"https://lists.debian.org/debian-lts-announce/2025/01/msg00001.html\"}], \"providerMetadata\": {\"orgId\": \"af854a3a-2127-422b-91ae-364da2661108\", \"shortName\": \"CVE\", \"dateUpdated\": \"2025-11-03T21:56:14.179Z\"}}, {\"title\": \"CISA ADP Vulnrichment\", \"metrics\": [{\"other\": {\"type\": \"ssvc\", \"content\": {\"id\": \"CVE-2024-39496\", \"role\": \"CISA Coordinator\", \"options\": [{\"Exploitation\": \"none\"}, {\"Automatable\": \"no\"}, {\"Technical Impact\": \"partial\"}], \"version\": \"2.0.3\", \"timestamp\": \"2024-09-10T17:07:26.275755Z\"}}}], \"providerMetadata\": {\"orgId\": \"134c704f-9b21-4f2e-91b3-4a467353bcc0\", \"shortName\": \"CISA-ADP\", \"dateUpdated\": \"2024-09-11T12:42:25.052Z\"}}], \"cna\": {\"title\": \"btrfs: zoned: fix use-after-free due to race with dev replace\", \"affected\": [{\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"5b316468983dfa9473ff0f1c42e4e30b4c267141\", \"lessThan\": \"17765964703b88d8befd899f8501150bb7e07e43\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"5b316468983dfa9473ff0f1c42e4e30b4c267141\", \"lessThan\": \"092571ef9a812566c8f2c9038d9c2a64c49788d6\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"5b316468983dfa9473ff0f1c42e4e30b4c267141\", \"lessThan\": \"a0cc006f4214b87e70983c692e05bb36c59b5752\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"5b316468983dfa9473ff0f1c42e4e30b4c267141\", \"lessThan\": \"0090d6e1b210551e63cf43958dc7a1ec942cdde9\", \"versionType\": \"git\"}], \"programFiles\": [\"fs/btrfs/zoned.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.11\"}, {\"status\": \"unaffected\", \"version\": \"0\", \"lessThan\": \"5.11\", \"versionType\": \"semver\"}, {\"status\": \"unaffected\", \"version\": \"6.1.95\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.1.*\"}, {\"status\": \"unaffected\", \"version\": \"6.6.35\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.6.*\"}, {\"status\": \"unaffected\", \"version\": \"6.9.6\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.9.*\"}, {\"status\": \"unaffected\", \"version\": \"6.10\", \"versionType\": \"original_commit_for_fix\", \"lessThanOrEqual\": \"*\"}], \"programFiles\": [\"fs/btrfs/zoned.c\"], \"defaultStatus\": \"affected\"}], \"references\": [{\"url\": \"https://git.kernel.org/stable/c/17765964703b88d8befd899f8501150bb7e07e43\"}, {\"url\": \"https://git.kernel.org/stable/c/092571ef9a812566c8f2c9038d9c2a64c49788d6\"}, {\"url\": \"https://git.kernel.org/stable/c/a0cc006f4214b87e70983c692e05bb36c59b5752\"}, {\"url\": \"https://git.kernel.org/stable/c/0090d6e1b210551e63cf43958dc7a1ec942cdde9\"}], \"x_generator\": {\"engine\": \"bippy-1.2.0\"}, \"descriptions\": [{\"lang\": \"en\", \"value\": \"In the Linux kernel, the following vulnerability has been resolved:\\n\\nbtrfs: zoned: fix use-after-free due to race with dev replace\\n\\nWhile loading a zone\u0027s info during creation of a block group, we can race\\nwith a device replace operation and then trigger a use-after-free on the\\ndevice that was just replaced (source device of the replace operation).\\n\\nThis happens because at btrfs_load_zone_info() we extract a device from\\nthe chunk map into a local variable and then use the device while not\\nunder the protection of the device replace rwsem. So if there\u0027s a device\\nreplace operation happening when we extract the device and that device\\nis the source of the replace operation, we will trigger a use-after-free\\nif before we finish using the device the replace operation finishes and\\nfrees the device.\\n\\nFix this by enlarging the critical section under the protection of the\\ndevice replace rwsem so that all uses of the device are done inside the\\ncritical section.\"}], \"cpeApplicability\": [{\"nodes\": [{\"negate\": false, \"cpeMatch\": [{\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.1.95\", \"versionStartIncluding\": \"5.11\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.6.35\", \"versionStartIncluding\": \"5.11\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.9.6\", \"versionStartIncluding\": \"5.11\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.10\", \"versionStartIncluding\": \"5.11\"}], \"operator\": \"OR\"}]}], \"providerMetadata\": {\"orgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"shortName\": \"Linux\", \"dateUpdated\": \"2026-05-11T20:21:41.128Z\"}}}",
      "cveMetadata": "{\"cveId\": \"CVE-2024-39496\", \"state\": \"PUBLISHED\", \"dateUpdated\": \"2026-05-11T20:21:41.128Z\", \"dateReserved\": \"2024-06-25T14:23:23.751Z\", \"assignerOrgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"datePublished\": \"2024-07-12T12:20:31.669Z\", \"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…