CVE-2026-46061 (GCVE-0-2026-46061)

Vulnerability from cvelistv5 – Published: 2026-05-27 12:57 – Updated: 2026-05-27 12:57
VLAI
Title
jbd2: fix deadlock in jbd2_journal_cancel_revoke()
Summary
In the Linux kernel, the following vulnerability has been resolved: jbd2: fix deadlock in jbd2_journal_cancel_revoke() Commit f76d4c28a46a ("fs/jbd2: use sleeping version of __find_get_block()") changed jbd2_journal_cancel_revoke() to use __find_get_block_nonatomic() which holds the folio lock instead of i_private_lock. This breaks the lock ordering (folio -> buffer) and causes an ABBA deadlock when the filesystem blocksize < pagesize: T1 T2 ext4_mkdir() ext4_init_new_dir() ext4_append() ext4_getblk() lock_buffer() <- A sync_blockdev() blkdev_writepages() writeback_iter() writeback_get_folio() folio_lock() <- B ext4_journal_get_create_access() jbd2_journal_cancel_revoke() __find_get_block_nonatomic() folio_lock() <- B block_write_full_folio() lock_buffer() <- A This can occasionally cause generic/013 to hang. Fix by only calling __find_get_block_nonatomic() when the passed buffer_head doesn't belong to the bdev, which is the only case that we need to look up its bdev alias. Otherwise, the lookup is redundant since the found buffer_head is equal to the one we passed in.
Severity
No CVSS data available.
Assigner
Impacted products
Vendor Product Version
Linux Linux Affected: f1c5aa614b5c251f93a6a4c8c26001d5e9e53fd6 , < dff07cc98fdf6af57a7c054dc09b2050a9d5c287 (git)
Affected: f76d4c28a46a9260d85e00dafc8f46d369365d33 , < 2b2fee890250ab647a601124471a334bb01a0790 (git)
Affected: f76d4c28a46a9260d85e00dafc8f46d369365d33 , < bbd943d6a2d566428324b516a37f98328dfb802d (git)
Affected: f76d4c28a46a9260d85e00dafc8f46d369365d33 , < 981fcc5674e67158d24d23e841523eccba19d0e7 (git)
Affected: 1bb7a4b6b3d7dd8da6f5a9d0529d42c22a359e71 (git)
Affected: 6.12.31 , < 6.12.86 (semver)
Affected: 6.14.9 , < 6.15 (semver)
Create a notification for this product.
Linux Linux Affected: 6.15
Unaffected: 0 , < 6.15 (semver)
Unaffected: 6.12.86 , ≤ 6.12.* (semver)
Unaffected: 6.18.27 , ≤ 6.18.* (semver)
Unaffected: 7.0.4 , ≤ 7.0.* (semver)
Unaffected: 7.1-rc1 , ≤ * (original_commit_for_fix)
Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "fs/jbd2/revoke.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "dff07cc98fdf6af57a7c054dc09b2050a9d5c287",
              "status": "affected",
              "version": "f1c5aa614b5c251f93a6a4c8c26001d5e9e53fd6",
              "versionType": "git"
            },
            {
              "lessThan": "2b2fee890250ab647a601124471a334bb01a0790",
              "status": "affected",
              "version": "f76d4c28a46a9260d85e00dafc8f46d369365d33",
              "versionType": "git"
            },
            {
              "lessThan": "bbd943d6a2d566428324b516a37f98328dfb802d",
              "status": "affected",
              "version": "f76d4c28a46a9260d85e00dafc8f46d369365d33",
              "versionType": "git"
            },
            {
              "lessThan": "981fcc5674e67158d24d23e841523eccba19d0e7",
              "status": "affected",
              "version": "f76d4c28a46a9260d85e00dafc8f46d369365d33",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "1bb7a4b6b3d7dd8da6f5a9d0529d42c22a359e71",
              "versionType": "git"
            },
            {
              "lessThan": "6.12.86",
              "status": "affected",
              "version": "6.12.31",
              "versionType": "semver"
            },
            {
              "lessThan": "6.15",
              "status": "affected",
              "version": "6.14.9",
              "versionType": "semver"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "fs/jbd2/revoke.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.15"
            },
            {
              "lessThan": "6.15",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.86",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.27",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.0.*",
              "status": "unaffected",
              "version": "7.0.4",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.1-rc1",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.86",
                  "versionStartIncluding": "6.12.31",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.27",
                  "versionStartIncluding": "6.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.0.4",
                  "versionStartIncluding": "6.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.1-rc1",
                  "versionStartIncluding": "6.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionStartIncluding": "6.14.9",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\njbd2: fix deadlock in jbd2_journal_cancel_revoke()\n\nCommit f76d4c28a46a (\"fs/jbd2: use sleeping version of\n__find_get_block()\") changed jbd2_journal_cancel_revoke() to use\n__find_get_block_nonatomic() which holds the folio lock instead of\ni_private_lock. This breaks the lock ordering (folio -\u003e buffer) and\ncauses an ABBA deadlock when the filesystem blocksize \u003c pagesize:\n\n     T1                                T2\next4_mkdir()\n ext4_init_new_dir()\n  ext4_append()\n   ext4_getblk()\n    lock_buffer()    \u003c- A\n                                   sync_blockdev()\n                                    blkdev_writepages()\n                                     writeback_iter()\n                                      writeback_get_folio()\n                                       folio_lock()   \u003c- B\n     ext4_journal_get_create_access()\n      jbd2_journal_cancel_revoke()\n       __find_get_block_nonatomic()\n        folio_lock()  \u003c- B\n                                     block_write_full_folio()\n                                      lock_buffer()   \u003c- A\n\nThis can occasionally cause generic/013 to hang.\n\nFix by only calling __find_get_block_nonatomic() when the passed\nbuffer_head doesn\u0027t belong to the bdev, which is the only case that we\nneed to look up its bdev alias. Otherwise, the lookup is redundant since\nthe found buffer_head is equal to the one we passed in."
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-05-27T12:57:22.041Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/dff07cc98fdf6af57a7c054dc09b2050a9d5c287"
        },
        {
          "url": "https://git.kernel.org/stable/c/2b2fee890250ab647a601124471a334bb01a0790"
        },
        {
          "url": "https://git.kernel.org/stable/c/bbd943d6a2d566428324b516a37f98328dfb802d"
        },
        {
          "url": "https://git.kernel.org/stable/c/981fcc5674e67158d24d23e841523eccba19d0e7"
        }
      ],
      "title": "jbd2: fix deadlock in jbd2_journal_cancel_revoke()",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-46061",
    "datePublished": "2026-05-27T12:57:22.041Z",
    "dateReserved": "2026-05-13T15:03:33.095Z",
    "dateUpdated": "2026-05-27T12:57:22.041Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-46061",
      "date": "2026-05-29",
      "epss": "0.00018",
      "percentile": "0.04919"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-46061\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-05-27T14:17:25.883\",\"lastModified\":\"2026-05-27T14:48:03.013\",\"vulnStatus\":\"Awaiting Analysis\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\njbd2: fix deadlock in jbd2_journal_cancel_revoke()\\n\\nCommit f76d4c28a46a (\\\"fs/jbd2: use sleeping version of\\n__find_get_block()\\\") changed jbd2_journal_cancel_revoke() to use\\n__find_get_block_nonatomic() which holds the folio lock instead of\\ni_private_lock. This breaks the lock ordering (folio -\u003e buffer) and\\ncauses an ABBA deadlock when the filesystem blocksize \u003c pagesize:\\n\\n     T1                                T2\\next4_mkdir()\\n ext4_init_new_dir()\\n  ext4_append()\\n   ext4_getblk()\\n    lock_buffer()    \u003c- A\\n                                   sync_blockdev()\\n                                    blkdev_writepages()\\n                                     writeback_iter()\\n                                      writeback_get_folio()\\n                                       folio_lock()   \u003c- B\\n     ext4_journal_get_create_access()\\n      jbd2_journal_cancel_revoke()\\n       __find_get_block_nonatomic()\\n        folio_lock()  \u003c- B\\n                                     block_write_full_folio()\\n                                      lock_buffer()   \u003c- A\\n\\nThis can occasionally cause generic/013 to hang.\\n\\nFix by only calling __find_get_block_nonatomic() when the passed\\nbuffer_head doesn\u0027t belong to the bdev, which is the only case that we\\nneed to look up its bdev alias. Otherwise, the lookup is redundant since\\nthe found buffer_head is equal to the one we passed in.\"}],\"metrics\":{},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/2b2fee890250ab647a601124471a334bb01a0790\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/981fcc5674e67158d24d23e841523eccba19d0e7\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/bbd943d6a2d566428324b516a37f98328dfb802d\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/dff07cc98fdf6af57a7c054dc09b2050a9d5c287\",\"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…