CVE-2026-89665 (GCVE-0-2026-89665)
Vulnerability from cvelistv5
Published
2026-09-11 19:45
Modified
2026-10-19 08:50
Summary
In the Linux kernel, the following vulnerability has been resolved: nfsd: reject out-of-range useconds in NFSv2 SETATTR/CREATE The NFSv2 sattr decoder converts the wire useconds to nanoseconds in svcxdr_decode_sattr(): iap->ia_atime.tv_nsec = tmp2 * NSEC_PER_USEC; tmp2 is a u32 and NSEC_PER_USEC is 1000, so the product is computed in unsigned long. On ILP32 that is 32 bits, and an out-of-range useconds value such as 4294968 wraps to tv_nsec == 704. The corruption therefore happens during decode, before any proc function can inspect the value, and a later range check on tv_nsec would see an in-range result and accept it. Rejecting in the decoder yields an RPC GARBAGE_ARGS reply. NFSv2 defines no NFSERR_INVAL, so there is no NFS-level status to return for a malformed time argument, and the check cannot move to the proc function the way the v3/v4 nsec range checks do. Guard the raw useconds before the multiplication and reject values greater than 1000000. useconds == 1000000 is kept: it is the Sun convention for "set to the current server time", and the in-tree Linux NFSv2 client emits it in both the atime and the mtime field for a plain touch / utimes(file, NULL) (see encode_sattr() and xdr_encode_current_server_time() in fs/nfs/nfs2xdr.c). Rejecting 1000000 would turn that common operation into a hard decode failure for both SETATTR and CREATE. 1000000 * NSEC_PER_USEC is 10^9, which does not wrap on ILP32, so the Sun convention value passes through safely. Only genuinely out-of-range values (> 1000000) are rejected. The atime and mtime guards are therefore symmetric. The decoder only applied the Sun convention in the mtime block, which clears ATTR_ATIME_SET|ATTR_MTIME_SET when mtime useconds == 1000000. If a client puts 1000000 in the atime field but not in the mtime field, the atime block stored an out-of-range tv_nsec (10^9) and left ATTR_ATIME_SET set, so the bogus value reached the filesystem. Apply the convention in the atime block as well, clearing ATTR_ATIME_SET so the server uses its current time and ignores the value. Only ATTR_ATIME_SET is cleared there. The mtime block keeps its existing behavior, where 1000000 means "set both atime and mtime to now". [ cel: various tweaks, addenda, and clean-ups ]
Impacted products
Vendor Product Version
Linux Linux Version: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2
Version: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2
Version: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2
Version: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2
Version: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2
Version: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2
Version: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2
Version: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2026-89665",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "yes"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-10-16T19:25:40.808424Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2026-10-16T19:26:47.904Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "fs/nfsd/nfsxdr.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "cdc3299f7072777b09c9582a3b8b65bb163ddcf3",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "09a79d9ab35a39603c834e8f6333603292f9c816",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "5296a2442d12d45d6eea7b4d3ec3ffecc1821cac",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "1db456ffc22e045f49f7b9e62415a26b3f33f200",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "a937dd1aa2d92291fe0a1860d17e90d8f206cd22",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "ad02d095439f89cbd6629420c7e3ba476457b83b",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "1195483965a5f63d2dde18054ec7e50a23b9071c",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            },
            {
              "lessThan": "26709c8ffe73772eb69e68d553ac71d91228dccc",
              "status": "affected",
              "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "fs/nfsd/nfsxdr.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "2.6.12"
            },
            {
              "lessThan": "2.6.12",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.10.*",
              "status": "unaffected",
              "version": "5.10.270",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.15.*",
              "status": "unaffected",
              "version": "5.15.221",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.188",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.157",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.109",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.50",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.4",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.10.270",
                  "versionStartIncluding": "2.6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.15.221",
                  "versionStartIncluding": "2.6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.188",
                  "versionStartIncluding": "2.6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.157",
                  "versionStartIncluding": "2.6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.109",
                  "versionStartIncluding": "2.6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.50",
                  "versionStartIncluding": "2.6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.4",
                  "versionStartIncluding": "2.6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3",
                  "versionStartIncluding": "2.6.12",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnfsd: reject out-of-range useconds in NFSv2 SETATTR/CREATE\n\nThe NFSv2 sattr decoder converts the wire useconds to nanoseconds in\nsvcxdr_decode_sattr():\n\n\tiap-\u003eia_atime.tv_nsec = tmp2 * NSEC_PER_USEC;\n\ntmp2 is a u32 and NSEC_PER_USEC is 1000, so the product is computed in\nunsigned long. On ILP32 that is 32 bits, and an out-of-range useconds\nvalue such as 4294968 wraps to tv_nsec == 704. The corruption therefore\nhappens during decode, before any proc function can inspect the value,\nand a later range check on tv_nsec would see an in-range result and\naccept it. Rejecting in the decoder yields an RPC GARBAGE_ARGS reply.\nNFSv2 defines no NFSERR_INVAL, so there is no NFS-level status to return\nfor a malformed time argument, and the check cannot move to the proc\nfunction the way the v3/v4 nsec range checks do.\n\nGuard the raw useconds before the multiplication and reject values\ngreater than 1000000. useconds == 1000000 is kept: it is the Sun\nconvention for \"set to the current server time\", and the in-tree Linux\nNFSv2 client emits it in both the atime and the mtime field for a plain\ntouch / utimes(file, NULL) (see encode_sattr() and\nxdr_encode_current_server_time() in fs/nfs/nfs2xdr.c). Rejecting 1000000\nwould turn that common operation into a hard decode failure for both\nSETATTR and CREATE. 1000000 * NSEC_PER_USEC is 10^9, which does not wrap\non ILP32, so the Sun convention value passes through safely. Only\ngenuinely out-of-range values (\u003e 1000000) are rejected. The atime and\nmtime guards are therefore symmetric.\n\nThe decoder only applied the Sun convention in the mtime block, which\nclears ATTR_ATIME_SET|ATTR_MTIME_SET when mtime useconds == 1000000. If a\nclient puts 1000000 in the atime field but not in the mtime field, the\natime block stored an out-of-range tv_nsec (10^9) and left ATTR_ATIME_SET\nset, so the bogus value reached the filesystem. Apply the convention in\nthe atime block as well, clearing ATTR_ATIME_SET so the server uses its\ncurrent time and ignores the value. Only ATTR_ATIME_SET is cleared there.\nThe mtime block keeps its existing behavior, where 1000000 means \"set\nboth atime and mtime to now\".\n\n[ cel: various tweaks, addenda, and clean-ups ]"
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 8.2,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:L",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:N - The bug is in nfsd\u0027s NFSv2 XDR decoder svcxdr_decode_sattr(), used by SETATTR, CREATE, and SYMLINK on the in-kernel NFS server (TCP/UDP 2049); a remote client triggers it by sending those procedures with an out-of-range sattr useconds field.\nAC:L - The attacker fully controls the sattr atime/mtime useconds fields and can deterministically supply a value greater than 1000000, or 1000000 in atime only; the ILP32 multiply wrap and the LP64 out-of-range nsec store need no race or other condition the attacker cannot influence.\nPR:N - Typical nfsd deployments accept AUTH_SYS/AUTH_NULL on reachable exports, so a network peer can obtain a filehandle and assert an owner UID without verified credentials; NFSv2 SETATTR/CREATE then applies the decoded timestamps under those unauthenticated credentials.\nUI:N - The attacker alone looks up a filehandle and issues SETATTR or CREATE with a crafted useconds value; no victim user action is required beyond nfsd already exporting a writable filesystem with NFSv2 enabled.\nS:U - Impact is confined to the NFS server\u0027s own kernel and filesystem inode timestamp metadata under the same OS security authority; there is no VM escape, IOMMU bypass, or other cross-boundary effect.\nC:N - The decoder only converts a client useconds field into ia_atime/ia_mtime.tv_nsec and later writes it via setattr; there is no out-of-bounds read, use-after-free, or other kernel-memory disclosure primitive.\nI:H - Out-of-range nsec is not rejected and notify_change()/timestamp_truncate() store it verbatim on nanosecond filesystems, so ext4_encode_extra_time() overflows the extra field and clobbers epoch bits and XFS mis-stores the timestamp, persistently corrupting on-disk inode metadata; when uncertain versus Low, High is required.\nA:L - Corrupted on-disk timestamps can cause xfs scrub to flag inodes corrupt and can break mtime-based tools on the exported file, degrading service around that inode. No oops, panic, hang, or other kernel crash was found on this path, so availability loss is partial rather than total."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-10-19T08:50:36.772Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/cdc3299f7072777b09c9582a3b8b65bb163ddcf3"
        },
        {
          "url": "https://git.kernel.org/stable/c/09a79d9ab35a39603c834e8f6333603292f9c816"
        },
        {
          "url": "https://git.kernel.org/stable/c/5296a2442d12d45d6eea7b4d3ec3ffecc1821cac"
        },
        {
          "url": "https://git.kernel.org/stable/c/1db456ffc22e045f49f7b9e62415a26b3f33f200"
        },
        {
          "url": "https://git.kernel.org/stable/c/a937dd1aa2d92291fe0a1860d17e90d8f206cd22"
        },
        {
          "url": "https://git.kernel.org/stable/c/ad02d095439f89cbd6629420c7e3ba476457b83b"
        },
        {
          "url": "https://git.kernel.org/stable/c/1195483965a5f63d2dde18054ec7e50a23b9071c"
        },
        {
          "url": "https://git.kernel.org/stable/c/26709c8ffe73772eb69e68d553ac71d91228dccc"
        }
      ],
      "title": "nfsd: reject out-of-range useconds in NFSv2 SETATTR/CREATE",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-89665",
    "datePublished": "2026-09-11T19:45:52.102Z",
    "dateReserved": "2026-09-11T19:38:34.745Z",
    "dateUpdated": "2026-10-19T08:50:36.772Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "vulnrichment": {
      "containers": "{\"adp\": [{\"title\": \"CISA ADP Vulnrichment\", \"metrics\": [{\"other\": {\"type\": \"ssvc\", \"content\": {\"id\": \"CVE-2026-89665\", \"role\": \"CISA Coordinator\", \"options\": [{\"Exploitation\": \"none\"}, {\"Automatable\": \"yes\"}, {\"Technical Impact\": \"partial\"}], \"version\": \"2.0.3\", \"timestamp\": \"2026-10-16T19:25:40.808424Z\"}}}], \"providerMetadata\": {\"orgId\": \"134c704f-9b21-4f2e-91b3-4a467353bcc0\", \"shortName\": \"CISA-ADP\", \"dateUpdated\": \"2026-10-16T19:25:41.338Z\"}}], \"cna\": {\"title\": \"nfsd: reject out-of-range useconds in NFSv2 SETATTR/CREATE\", \"metrics\": [{\"cvssV3_1\": {\"version\": \"3.1\", \"baseScore\": 8.2, \"baseSeverity\": \"HIGH\", \"vectorString\": \"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:L\"}, \"scenarios\": [{\"lang\": \"en\", \"value\": \"AV:N - The bug is in nfsd\u0027s NFSv2 XDR decoder svcxdr_decode_sattr(), used by SETATTR, CREATE, and SYMLINK on the in-kernel NFS server (TCP/UDP 2049); a remote client triggers it by sending those procedures with an out-of-range sattr useconds field.\\nAC:L - The attacker fully controls the sattr atime/mtime useconds fields and can deterministically supply a value greater than 1000000, or 1000000 in atime only; the ILP32 multiply wrap and the LP64 out-of-range nsec store need no race or other condition the attacker cannot influence.\\nPR:N - Typical nfsd deployments accept AUTH_SYS/AUTH_NULL on reachable exports, so a network peer can obtain a filehandle and assert an owner UID without verified credentials; NFSv2 SETATTR/CREATE then applies the decoded timestamps under those unauthenticated credentials.\\nUI:N - The attacker alone looks up a filehandle and issues SETATTR or CREATE with a crafted useconds value; no victim user action is required beyond nfsd already exporting a writable filesystem with NFSv2 enabled.\\nS:U - Impact is confined to the NFS server\u0027s own kernel and filesystem inode timestamp metadata under the same OS security authority; there is no VM escape, IOMMU bypass, or other cross-boundary effect.\\nC:N - The decoder only converts a client useconds field into ia_atime/ia_mtime.tv_nsec and later writes it via setattr; there is no out-of-bounds read, use-after-free, or other kernel-memory disclosure primitive.\\nI:H - Out-of-range nsec is not rejected and notify_change()/timestamp_truncate() store it verbatim on nanosecond filesystems, so ext4_encode_extra_time() overflows the extra field and clobbers epoch bits and XFS mis-stores the timestamp, persistently corrupting on-disk inode metadata; when uncertain versus Low, High is required.\\nA:L - Corrupted on-disk timestamps can cause xfs scrub to flag inodes corrupt and can break mtime-based tools on the exported file, degrading service around that inode. No oops, panic, hang, or other kernel crash was found on this path, so availability loss is partial rather than total.\"}]}], \"affected\": [{\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2\", \"lessThan\": \"cdc3299f7072777b09c9582a3b8b65bb163ddcf3\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2\", \"lessThan\": \"09a79d9ab35a39603c834e8f6333603292f9c816\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2\", \"lessThan\": \"5296a2442d12d45d6eea7b4d3ec3ffecc1821cac\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2\", \"lessThan\": \"1db456ffc22e045f49f7b9e62415a26b3f33f200\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2\", \"lessThan\": \"a937dd1aa2d92291fe0a1860d17e90d8f206cd22\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2\", \"lessThan\": \"ad02d095439f89cbd6629420c7e3ba476457b83b\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2\", \"lessThan\": \"1195483965a5f63d2dde18054ec7e50a23b9071c\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2\", \"lessThan\": \"26709c8ffe73772eb69e68d553ac71d91228dccc\", \"versionType\": \"git\"}], \"programFiles\": [\"fs/nfsd/nfsxdr.c\"], \"defaultStatus\": \"unaffected\"}, {\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"2.6.12\"}, {\"status\": \"unaffected\", \"version\": \"0\", \"lessThan\": \"2.6.12\", \"versionType\": \"semver\"}, {\"status\": \"unaffected\", \"version\": \"5.10.270\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"5.10.*\"}, {\"status\": \"unaffected\", \"version\": \"5.15.221\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"5.15.*\"}, {\"status\": \"unaffected\", \"version\": \"6.1.188\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.1.*\"}, {\"status\": \"unaffected\", \"version\": \"6.6.157\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.6.*\"}, {\"status\": \"unaffected\", \"version\": \"6.12.109\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.12.*\"}, {\"status\": \"unaffected\", \"version\": \"6.18.50\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.18.*\"}, {\"status\": \"unaffected\", \"version\": \"7.2.4\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"7.2.*\"}, {\"status\": \"unaffected\", \"version\": \"7.3\", \"versionType\": \"original_commit_for_fix\", \"lessThanOrEqual\": \"*\"}], \"programFiles\": [\"fs/nfsd/nfsxdr.c\"], \"defaultStatus\": \"affected\"}], \"references\": [{\"url\": \"https://git.kernel.org/stable/c/cdc3299f7072777b09c9582a3b8b65bb163ddcf3\"}, {\"url\": \"https://git.kernel.org/stable/c/09a79d9ab35a39603c834e8f6333603292f9c816\"}, {\"url\": \"https://git.kernel.org/stable/c/5296a2442d12d45d6eea7b4d3ec3ffecc1821cac\"}, {\"url\": \"https://git.kernel.org/stable/c/1db456ffc22e045f49f7b9e62415a26b3f33f200\"}, {\"url\": \"https://git.kernel.org/stable/c/a937dd1aa2d92291fe0a1860d17e90d8f206cd22\"}, {\"url\": \"https://git.kernel.org/stable/c/ad02d095439f89cbd6629420c7e3ba476457b83b\"}, {\"url\": \"https://git.kernel.org/stable/c/1195483965a5f63d2dde18054ec7e50a23b9071c\"}, {\"url\": \"https://git.kernel.org/stable/c/26709c8ffe73772eb69e68d553ac71d91228dccc\"}], \"x_generator\": {\"engine\": \"bippy-1.2.0\"}, \"descriptions\": [{\"lang\": \"en\", \"value\": \"In the Linux kernel, the following vulnerability has been resolved:\\n\\nnfsd: reject out-of-range useconds in NFSv2 SETATTR/CREATE\\n\\nThe NFSv2 sattr decoder converts the wire useconds to nanoseconds in\\nsvcxdr_decode_sattr():\\n\\n\\tiap-\u003eia_atime.tv_nsec = tmp2 * NSEC_PER_USEC;\\n\\ntmp2 is a u32 and NSEC_PER_USEC is 1000, so the product is computed in\\nunsigned long. On ILP32 that is 32 bits, and an out-of-range useconds\\nvalue such as 4294968 wraps to tv_nsec == 704. The corruption therefore\\nhappens during decode, before any proc function can inspect the value,\\nand a later range check on tv_nsec would see an in-range result and\\naccept it. Rejecting in the decoder yields an RPC GARBAGE_ARGS reply.\\nNFSv2 defines no NFSERR_INVAL, so there is no NFS-level status to return\\nfor a malformed time argument, and the check cannot move to the proc\\nfunction the way the v3/v4 nsec range checks do.\\n\\nGuard the raw useconds before the multiplication and reject values\\ngreater than 1000000. useconds == 1000000 is kept: it is the Sun\\nconvention for \\\"set to the current server time\\\", and the in-tree Linux\\nNFSv2 client emits it in both the atime and the mtime field for a plain\\ntouch / utimes(file, NULL) (see encode_sattr() and\\nxdr_encode_current_server_time() in fs/nfs/nfs2xdr.c). Rejecting 1000000\\nwould turn that common operation into a hard decode failure for both\\nSETATTR and CREATE. 1000000 * NSEC_PER_USEC is 10^9, which does not wrap\\non ILP32, so the Sun convention value passes through safely. Only\\ngenuinely out-of-range values (\u003e 1000000) are rejected. The atime and\\nmtime guards are therefore symmetric.\\n\\nThe decoder only applied the Sun convention in the mtime block, which\\nclears ATTR_ATIME_SET|ATTR_MTIME_SET when mtime useconds == 1000000. If a\\nclient puts 1000000 in the atime field but not in the mtime field, the\\natime block stored an out-of-range tv_nsec (10^9) and left ATTR_ATIME_SET\\nset, so the bogus value reached the filesystem. Apply the convention in\\nthe atime block as well, clearing ATTR_ATIME_SET so the server uses its\\ncurrent time and ignores the value. Only ATTR_ATIME_SET is cleared there.\\nThe mtime block keeps its existing behavior, where 1000000 means \\\"set\\nboth atime and mtime to now\\\".\\n\\n[ cel: various tweaks, addenda, and clean-ups ]\"}], \"cpeApplicability\": [{\"nodes\": [{\"negate\": false, \"cpeMatch\": [{\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"5.10.270\", \"versionStartIncluding\": \"2.6.12\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"5.15.221\", \"versionStartIncluding\": \"2.6.12\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.1.188\", \"versionStartIncluding\": \"2.6.12\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.6.157\", \"versionStartIncluding\": \"2.6.12\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.12.109\", \"versionStartIncluding\": \"2.6.12\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.18.50\", \"versionStartIncluding\": \"2.6.12\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"7.2.4\", \"versionStartIncluding\": \"2.6.12\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"7.3\", \"versionStartIncluding\": \"2.6.12\"}], \"operator\": \"OR\"}]}], \"providerMetadata\": {\"orgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"shortName\": \"Linux\", \"dateUpdated\": \"2026-10-19T08:50:36.772Z\"}}}",
      "cveMetadata": "{\"cveId\": \"CVE-2026-89665\", \"state\": \"PUBLISHED\", \"dateUpdated\": \"2026-10-19T08:50:36.772Z\", \"dateReserved\": \"2026-09-11T19:38:34.745Z\", \"assignerOrgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"datePublished\": \"2026-09-11T19:45:52.102Z\", \"assignerShortName\": \"Linux\"}",
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }
  }
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.


Loading…

Loading…