{
  "affected": [
    {
      "ecosystem_specific": {
        "urgency": "not yet assigned"
      },
      "package": {
        "ecosystem": "Debian:12",
        "name": "linux"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    },
    {
      "ecosystem_specific": {
        "urgency": "not yet assigned"
      },
      "package": {
        "ecosystem": "Debian:13",
        "name": "linux"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    },
    {
      "ecosystem_specific": {
        "urgency": "not yet assigned"
      },
      "package": {
        "ecosystem": "Debian:14",
        "name": "linux"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    }
  ],
  "details": "In the Linux kernel, the following vulnerability has been resolved:  ocfs2: fix readdir position truncation on 32-bit kernels  In ocfs2_dir_foreach_blk_el(), the directory cookie position is rebuilt with  \tctx-\u003epos = (ctx-\u003epos \u0026 ~(sb-\u003es_blocksize - 1)) | offset;  `ctx-\u003epos` is loff_t (signed 64-bit), while `sb-\u003es_blocksize` is unsigned long.  On 32-bit kernels unsigned long is 32-bit, so the mask  \t~(sb-\u003es_blocksize - 1)  is computed as a 32-bit unsigned value (e.g. 0xfffff000 for a 4 KiB block size).  In the AND expression with the 64-bit `ctx-\u003epos`, that unsigned operand is zero-extended to 64 bits per the usual arithmetic conversions, yielding 0x00000000fffff000.  The high 32 bits of `ctx-\u003epos` are silently cleared, even though directory size is allowed to exceed 4 GiB.  When readdir() crosses the 4 GiB boundary on a 32-bit kernel the position is reset back into the first 4 GiB block, making the re-validation path re-enumerate already-returned dirents indefinitely.  This is ocfs2_dir_foreach_blk_el(), the extent-list readdir path taken for all non-inline directories, so a directory large enough to cross 4 GiB reaches it.  This is the same class of bug that commit 3dce5bb82c97 (\"exfat: Fix bitwise operation having different size\") fixed in exfat, and the fix mirrors the equivalent ext4 fix in this series.  Cast the operand to loff_t so the mask is 64-bit before the AND:  \tctx-\u003epos = (ctx-\u003epos \u0026 ~((loff_t)sb-\u003es_blocksize - 1)) | offset;  64-bit kernels are unaffected.",
  "id": "DEBIAN-CVE-2026-89490",
  "modified": "2026-09-15T08:47:26.187862210Z",
  "published": "2026-09-11T20:19:30.810Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://security-tracker.debian.org/tracker/CVE-2026-89490"
    }
  ],
  "upstream": [
    "CVE-2026-89490"
  ]
}