{
  "schemaVersion": 1,
  "attribution": [
    {
      "source": "CISA Known Exploited Vulnerabilities",
      "url": "https://www.cisa.gov/known-exploited-vulnerabilities-catalog",
      "licence": "US government work"
    },
    {
      "source": "GitHub Advisory Database",
      "url": "https://github.com/advisories",
      "licence": "CC BY 4.0"
    },
    {
      "source": "Have I Been Pwned",
      "url": "https://haveibeenpwned.com/",
      "licence": "CC BY 4.0"
    },
    {
      "source": "CVE Program (CVE records)",
      "url": "https://www.cve.org/Legal/TermsOfUse",
      "licence": "CVE Terms of Use",
      "notice": "Copyright © 1999-2026, The MITRE Corporation. CVE is a trademark and the CVE logo is a registered trademark of The MITRE Corporation.",
      "terms": "CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE™). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy."
    },
    {
      "source": "FIRST EPSS",
      "url": "https://www.first.org/epss/",
      "licence": "free to use; FIRST requests attribution"
    }
  ],
  "record": {
    "id": "CVE-2021-47189",
    "sourceURL": "https://www.cve.org/CVERecord?id=CVE-2021-47189",
    "idYear": 2021,
    "status": "PUBLISHED",
    "publishedAt": "2024-04-10T18:56:28.194Z",
    "updatedAt": "2026-08-05T08:46:35.936Z",
    "importedAt": "2026-10-24T01:56:36.661Z",
    "snapshot": {
      "id": "cve_2026-10-24_midnight_baseline",
      "at": "2026-10-24T00:00:00.000Z",
      "source": "https://github.com/CVEProject/cvelistV5/releases/tag/cve_2026-10-24_0100Z"
    },
    "facts": {
      "title": "btrfs: fix memory ordering between normal and ordered work functions",
      "summary": "In the Linux kernel, the following vulnerability has been resolved:\n\nbtrfs: fix memory ordering between normal and ordered work functions\n\nOrdered work functions aren't guaranteed to be handled by the same thread\nwhich executed the normal work functions. The only way execution between\nnormal/ordered functions is synchronized is via the WORK_DONE_BIT,\nunfortunately the used bitops don't guarantee any ordering whatsoever.\n\nThis manifested as seemingly inexplicable crashes on ARM64, where\nasync_chunk::inode is seen as non-null in async_cow_submit which causes\nsubmit_compressed_extents to be called and crash occurs because\nasync_chunk::inode suddenly became NULL. The call trace was similar to:\n\n    pc : submit_compressed_extents+0x38/0x3d0\n    lr : async_cow_submit+0x50/0xd0\n    sp : ffff800015d4bc20\n\n    <registers omitted for brevity>\n\n    Call trace:\n     submit_compressed_extents+0x38/0x3d0\n     async_cow_submit+0x50/0xd0\n     run_ordered_work+0xc8/0x280\n     btrfs_work_helper+0x98/0x250\n     process_one_work+0x1f0/0x4ac\n     worker_thread+0x188/0x504\n     kthread+0x110/0x114\n     ret_from_fork+0x10/0x18\n\nFix this by adding respective barrier calls which ensure that all\naccesses preceding setting of WORK_DONE_BIT are strictly ordered before\nsetting the flag. At the same time add a read barrier after reading of\nWORK_DONE_BIT in run_ordered_work which ensures all subsequent loads\nwould be strictly ordered after reading the bit. This in turn ensures\nare all accesses before WORK_DONE_BIT are going to be strictly ordered\nbefore any access that can occur in ordered_func.",
      "affected": [
        {
          "vendor": "Linux",
          "product": "Linux",
          "defaultStatus": "unaffected",
          "versions": [
            {
              "version": "08a9ff3264181986d1d692a4e6fce3669700c9f8",
              "status": "affected",
              "versionType": "git",
              "lessThan": "bd660a20fea3ec60a49709ef5360f145ec0fe779"
            },
            {
              "version": "08a9ff3264181986d1d692a4e6fce3669700c9f8",
              "status": "affected",
              "versionType": "git",
              "lessThan": "637d652d351fd4f263ef302dc52f3971d314e500"
            },
            {
              "version": "08a9ff3264181986d1d692a4e6fce3669700c9f8",
              "status": "affected",
              "versionType": "git",
              "lessThan": "804a9d239ae9cbe88e861a7cd62319cc6ec7b136"
            },
            {
              "version": "08a9ff3264181986d1d692a4e6fce3669700c9f8",
              "status": "affected",
              "versionType": "git",
              "lessThan": "ed058d735a70f4b063323f1a7bb33cda0f987513"
            },
            {
              "version": "08a9ff3264181986d1d692a4e6fce3669700c9f8",
              "status": "affected",
              "versionType": "git",
              "lessThan": "670f6b3867c8f0f11e5097f353b164cecfec6179"
            },
            {
              "version": "08a9ff3264181986d1d692a4e6fce3669700c9f8",
              "status": "affected",
              "versionType": "git",
              "lessThan": "6adbc07ebcaf8bead08b21687d49e0fc94400987"
            },
            {
              "version": "08a9ff3264181986d1d692a4e6fce3669700c9f8",
              "status": "affected",
              "versionType": "git",
              "lessThan": "47e6f9f69153247109042010f3a77579e9dc61ff"
            },
            {
              "version": "08a9ff3264181986d1d692a4e6fce3669700c9f8",
              "status": "affected",
              "versionType": "git",
              "lessThan": "45da9c1767ac31857df572f0a909fbe88fd5a7e9"
            }
          ]
        },
        {
          "vendor": "Linux",
          "product": "Linux",
          "defaultStatus": "affected",
          "versions": [
            {
              "version": "3.15",
              "status": "affected"
            },
            {
              "version": "0",
              "status": "unaffected",
              "versionType": "semver",
              "lessThan": "3.15"
            },
            {
              "version": "4.4.293",
              "status": "unaffected",
              "versionType": "semver",
              "lessThanOrEqual": "4.4.*"
            },
            {
              "version": "4.9.291",
              "status": "unaffected",
              "versionType": "semver",
              "lessThanOrEqual": "4.9.*"
            },
            {
              "version": "4.14.256",
              "status": "unaffected",
              "versionType": "semver",
              "lessThanOrEqual": "4.14.*"
            },
            {
              "version": "4.19.218",
              "status": "unaffected",
              "versionType": "semver",
              "lessThanOrEqual": "4.19.*"
            },
            {
              "version": "5.4.162",
              "status": "unaffected",
              "versionType": "semver",
              "lessThanOrEqual": "5.4.*"
            },
            {
              "version": "5.10.82",
              "status": "unaffected",
              "versionType": "semver",
              "lessThanOrEqual": "5.10.*"
            },
            {
              "version": "5.15.5",
              "status": "unaffected",
              "versionType": "semver",
              "lessThanOrEqual": "5.15.*"
            },
            {
              "version": "5.16",
              "status": "unaffected",
              "versionType": "original_commit_for_fix",
              "lessThanOrEqual": "*"
            }
          ]
        }
      ]
    }
  }
}