← Back to CVE Explorer

CVE-2025-40233

Full vulnerability record from the local CVENow database.

Description

In the Linux kernel, the following vulnerability has been resolved: ocfs2: clear extent cache after moving/defragmenting extents The extent map cache can become stale when extents are moved or defragmented, causing subsequent operations to see outdated extent flags. This triggers a BUG_ON in ocfs2_refcount_cal_cow_clusters(). The problem occurs when: 1. copy_file_range() creates a reflinked extent with OCFS2_EXT_REFCOUNTED 2. ioctl(FITRIM) triggers ocfs2_move_extents() 3. __ocfs2_move_extents_range() reads and caches the extent (flags=0x2) 4. ocfs2_move_extent()/ocfs2_defrag_extent() calls __ocfs2_move_extent() which clears OCFS2_EXT_REFCOUNTED flag on disk (flags=0x0) 5. The extent map cache is not invalidated after the move 6. Later write() operations read stale cached flags (0x2) but disk has updated flags (0x0), causing a mismatch 7. BUG_ON(!(rec->e_flags & OCFS2_EXT_REFCOUNTED)) triggers Fix by clearing the extent map cache after each extent move/defrag operation in __ocfs2_move_extents_range(). This ensures subsequent operations read fresh extent data from disk.

Severity
HIGH
CVSS score
7.8 (v3.1)
Vulnerability status
Deferred
Source identifier
416baaa9-dc9f-4396-8d5f-8c081fb06d67
Published
2025-12-04 16:16:16.137000
Last modified
2026-10-19 21:10:00.160000
View original CVE JSON
{
  "id": "CVE-2025-40233",
  "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
  "published": "2025-12-04T16:16:16.137",
  "lastModified": "2026-10-19T21:10:00.160",
  "vulnStatus": "Deferred",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nocfs2: clear extent cache after moving/defragmenting extents\n\nThe extent map cache can become stale when extents are moved or\ndefragmented, causing subsequent operations to see outdated extent flags. \nThis triggers a BUG_ON in ocfs2_refcount_cal_cow_clusters().\n\nThe problem occurs when:\n1. copy_file_range() creates a reflinked extent with OCFS2_EXT_REFCOUNTED\n2. ioctl(FITRIM) triggers ocfs2_move_extents()\n3. __ocfs2_move_extents_range() reads and caches the extent (flags=0x2)\n4. ocfs2_move_extent()/ocfs2_defrag_extent() calls __ocfs2_move_extent()\n   which clears OCFS2_EXT_REFCOUNTED flag on disk (flags=0x0)\n5. The extent map cache is not invalidated after the move\n6. Later write() operations read stale cached flags (0x2) but disk has\n   updated flags (0x0), causing a mismatch\n7. BUG_ON(!(rec->e_flags & OCFS2_EXT_REFCOUNTED)) triggers\n\nFix by clearing the extent map cache after each extent move/defrag\noperation in __ocfs2_move_extents_range().  This ensures subsequent\noperations read fresh extent data from disk."
    },
    {
      "lang": "es",
      "value": "En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:\n\nocfs2: limpiar la caché de extents después de mover/desfragmentar extents\n\nLa caché del mapa de extents puede quedar obsoleta cuando los extents son movidos o desfragmentados, lo que provoca que las operaciones subsiguientes vean flags de extent desactualizados. Esto dispara un BUG_ON en ocfs2_refcount_cal_cow_clusters().\n\nEl problema ocurre cuando:\n1. copy_file_range() crea un extent con reflink con OCFS2_EXT_REFCOUNTED\n2. ioctl(FITRIM) dispara ocfs2_move_extents()\n3. __ocfs2_move_extents_range() lee y cachea el extent (flags=0x2)\n4. ocfs2_move_extent()/ocfs2_defrag_extent() llama a __ocfs2_move_extent() que borra el flag OCFS2_EXT_REFCOUNTED en disco (flags=0x0)\n5. La caché del mapa de extents no se invalida después del movimiento\n6. Operaciones de write() posteriores leen flags cacheados obsoletos (0x2) pero el disco tiene flags actualizados (0x0), causando una inconsistencia\n7. Se dispara BUG_ON(!(rec->e_flags & OCFS2_EXT_REFCOUNTED))\n\nLa solución es limpiar la caché del mapa de extents después de cada operación de movimiento/desfragmentación de extents en __ocfs2_move_extents_range(). Esto asegura que las operaciones subsiguientes lean datos de extent frescos del disco."
    }
  ],
  "affected": [
    {
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
      "affectedData": [
        {
          "vendor": "Linux",
          "product": "Linux",
          "defaultStatus": "unaffected",
          "programFiles": [
            "fs/ocfs2/move_extents.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "versions": [
            {
              "version": "53069d4e76954e2e63c1b3c501051c6fbcf7298c",
              "lessThan": "93166bc53c0e3587058327a4121daea34b4fecd5",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "53069d4e76954e2e63c1b3c501051c6fbcf7298c",
              "lessThan": "a7ee72286efba1d407c6f15a0528e43593fb7007",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "53069d4e76954e2e63c1b3c501051c6fbcf7298c",
              "lessThan": "93b1ab422f1966b71561158e1aedce4ec100f357",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "53069d4e76954e2e63c1b3c501051c6fbcf7298c",
              "lessThan": "e92af7737a94a729225d2a5d180eaaa77fe0bbc1",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "53069d4e76954e2e63c1b3c501051c6fbcf7298c",
              "lessThan": "aa6a21409dd6221bb268b56bb410e031c632ff9a",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "53069d4e76954e2e63c1b3c501051c6fbcf7298c",
              "lessThan": "bb69928ed578f881e68d26aaf1a8f6e7faab3b44",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "53069d4e76954e2e63c1b3c501051c6fbcf7298c",
              "lessThan": "a21750df2f6169af6e039a3bb4893d6c9564e48d",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "53069d4e76954e2e63c1b3c501051c6fbcf7298c",
              "lessThan": "78a63493f8e352296dbc7cb7b3f4973105e8679e",
              "versionType": "git",
              "status": "affected"
            }
          ]
        },
        {
          "vendor": "Linux",
          "product": "Linux",
          "defaultStatus": "affected",
          "programFiles": [
            "fs/ocfs2/move_extents.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "versions": [
            {
              "version": "3.0",
              "status": "affected"
            },
            {
              "version": "0",
              "lessThan": "3.0",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "5.4.301",
              "lessThanOrEqual": "5.4.*",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "5.10.246",
              "lessThanOrEqual": "5.10.*",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "5.15.196",
              "lessThanOrEqual": "5.15.*",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "6.1.158",
              "lessThanOrEqual": "6.1.*",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "6.6.115",
              "lessThanOrEqual": "6.6.*",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "6.12.56",
              "lessThanOrEqual": "6.12.*",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "6.17.6",
              "lessThanOrEqual": "6.17.*",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "6.18",
              "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/78a63493f8e352296dbc7cb7b3f4973105e8679e",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/93166bc53c0e3587058327a4121daea34b4fecd5",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/93b1ab422f1966b71561158e1aedce4ec100f357",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/a21750df2f6169af6e039a3bb4893d6c9564e48d",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/a7ee72286efba1d407c6f15a0528e43593fb7007",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/aa6a21409dd6221bb268b56bb410e031c632ff9a",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/bb69928ed578f881e68d26aaf1a8f6e7faab3b44",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/e92af7737a94a729225d2a5d180eaaa77fe0bbc1",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    }
  ]
}