← Back to CVE Explorer

CVE-2026-89714

Full vulnerability record from the local CVENow database.

Description

In the Linux kernel, the following vulnerability has been resolved: NFS: fix delegation_hash_table leak when nfs4_server_common_setup() fails nfs4_server_common_setup() allocates server->delegation_hash_table first, but server->destroy - the only path that frees the table via nfs4_destroy_server() - is not assigned until the very end of the function. If any intermediate step fails (the is_ds_only_client() check, nfs4_init_session(), nfs4_get_rootfh(), or nfs_probe_server()), the function returns with server->destroy still NULL, so the caller's nfs_free_server() skips the destroy callback and the hash table is leaked (4 KiB per attempt with the default delegation watermark). This is trivially reachable from userspace: every failed NFSv4 mount leaks one allocation. A client that persistently retries a mount that cannot succeed leaks kernel memory without bound. Observed in production where a Longhorn backup poller retried mount.nfs4 against an NFSv3-only server roughly 10 times per second, leaking ~3.4 GiB of unreclaimable slab (kmalloc-rnd-13-4k) per day; the node accumulated 12 GiB of leaked slab before the source was identified via the kmem:kmalloc tracepoint (call_site=nfs4_delegation_hash_alloc). Reproducer: # server exports NFSv3 only (or export path absent for v4) while :; do mount -t nfs4 <server>:/missing /mnt; done # watch SUnreclaim in /proc/meminfo grow 4 KiB per iteration Free the table on the error paths between the allocation and the assignment of server->destroy.

Severity
Not scored
CVSS score
Not available
Vulnerability status
Received
Source identifier
416baaa9-dc9f-4396-8d5f-8c081fb06d67
Published
2026-09-11 20:19:58.873000
Last modified
2026-10-19 09:18:10.373000
View original CVE JSON
{
  "id": "CVE-2026-89714",
  "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
  "published": "2026-09-11T20:19:58.873",
  "lastModified": "2026-10-19T09:18:10.373",
  "vulnStatus": "Received",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nNFS: fix delegation_hash_table leak when nfs4_server_common_setup() fails\n\nnfs4_server_common_setup() allocates server->delegation_hash_table\nfirst, but server->destroy - the only path that frees the table via\nnfs4_destroy_server() - is not assigned until the very end of the\nfunction. If any intermediate step fails (the is_ds_only_client()\ncheck, nfs4_init_session(), nfs4_get_rootfh(), or nfs_probe_server()),\nthe function returns with server->destroy still NULL, so the caller's\nnfs_free_server() skips the destroy callback and the hash table is\nleaked (4 KiB per attempt with the default delegation watermark).\n\nThis is trivially reachable from userspace: every failed NFSv4 mount\nleaks one allocation. A client that persistently retries a mount that\ncannot succeed leaks kernel memory without bound. Observed in\nproduction where a Longhorn backup poller retried mount.nfs4 against\nan NFSv3-only server roughly 10 times per second, leaking ~3.4 GiB of\nunreclaimable slab (kmalloc-rnd-13-4k) per day; the node accumulated\n12 GiB of leaked slab before the source was identified via the\nkmem:kmalloc tracepoint (call_site=nfs4_delegation_hash_alloc).\n\nReproducer:\n\n  # server exports NFSv3 only (or export path absent for v4)\n  while :; do mount -t nfs4 <server>:/missing /mnt; done\n  # watch SUnreclaim in /proc/meminfo grow 4 KiB per iteration\n\nFree the table on the error paths between the allocation and the\nassignment of server->destroy."
    }
  ],
  "affected": [
    {
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
      "affectedData": [
        {
          "vendor": "Linux",
          "product": "Linux",
          "defaultStatus": "unaffected",
          "programFiles": [
            "fs/nfs/nfs4client.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "versions": [
            {
              "version": "f5b3108e6a14418b120a3c38ca589b8d6cf87627",
              "lessThan": "f3adf1643517357221422c05986d6de5df7b9913",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "f5b3108e6a14418b120a3c38ca589b8d6cf87627",
              "lessThan": "0fd2b9687dae36be5b84eab39b4c627bb7ab33b3",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "f5b3108e6a14418b120a3c38ca589b8d6cf87627",
              "lessThan": "2092f5b38f88be306140c77aeeeb43fc1adacacc",
              "versionType": "git",
              "status": "affected"
            }
          ]
        },
        {
          "vendor": "Linux",
          "product": "Linux",
          "defaultStatus": "affected",
          "programFiles": [
            "fs/nfs/nfs4client.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "versions": [
            {
              "version": "6.17",
              "status": "affected"
            },
            {
              "version": "0",
              "lessThan": "6.17",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "6.18.50",
              "lessThanOrEqual": "6.18.*",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "7.2.4",
              "lessThanOrEqual": "7.2.*",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "7.3",
              "lessThanOrEqual": "*",
              "versionType": "original_commit_for_fix",
              "status": "unaffected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {},
  "references": [
    {
      "url": "https://git.kernel.org/stable/c/0fd2b9687dae36be5b84eab39b4c627bb7ab33b3",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/2092f5b38f88be306140c77aeeeb43fc1adacacc",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/f3adf1643517357221422c05986d6de5df7b9913",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    }
  ]
}