CVE-2026-89544 (GCVE-0-2026-89544)
Vulnerability from cvelistv5 – Published: 2026-09-11 19:44 – Updated: 2026-10-30 12:32| Vendor | Product | Version | CPE status | |
|---|---|---|---|---|
| Linux | Linux |
Affected:
bb336cd8d5ecb69c430ebe3e7bcff68471d93fa8 , < ac86b45bb978cd4fdbcaaca82dd0f2337f8e310c
(git)
Affected: dd292e884c649f9b1c18af0ec75ca90b390cd044 , < 3473139d15d67e2fd737cf0613082adb5499362f (git) Affected: 934212a623cbab851848b6de377eb476718c3e4c , < 993a9012e68b8667a0a9b316fd718680c7e008a0 (git) Affected: 5e6013ae2c8d420faea553d363935f65badd32c3 , < 8c56a46db3b7523f13e167c3e2c6e3c47a87dcb3 (git) Affected: 3cfcfc102a5e57b021b786a755a38935e357797d , < fb30241f7ccace372ee83017891549f23a715581 (git) Affected: 3cfcfc102a5e57b021b786a755a38935e357797d , < 3ff45361e9469e85c0f86b8e7b82c63e50bab8ef (git) Affected: 3cfcfc102a5e57b021b786a755a38935e357797d , < f85a83774d7f4e2ac71c0c384df0dfb6f7d0179a (git) Affected: 3cfcfc102a5e57b021b786a755a38935e357797d , < 5e9a94539b1ec17a89177d952badfd0d844d694a (git) Affected: b97c37978ca825557d331c9012e0c1ddc0e42364 (git) Affected: bfa9d86d39a0fe4685f90c3529aa9bd62a9d97a8 (git) Affected: 9806c2393cd2ab0a8e7bb9ffae02ce20e3112ec4 (git) Affected: 996997d1fb2126feda550d6adcedcbd94911fc69 (git) Affected: 5.10.214 , < 5.10.273 (semver) Affected: 5.15.153 , < 5.15.224 (semver) Affected: 6.1.83 , < 6.1.191 (semver) Affected: 6.6.23 , < 6.6.160 (semver) Affected: 4.19.311 , < 4.20 (semver) Affected: 5.4.273 , < 5.5 (semver) Affected: 6.7.11 , < 6.8 (semver) Affected: 6.8.2 , < 6.9 (semver) |
guessed | |
| Linux | Linux |
Affected:
6.9
Unaffected: 0 , < 6.9 (semver) Unaffected: 5.10.273 , ≤ 5.10.* (semver) Unaffected: 5.15.224 , ≤ 5.15.* (semver) Unaffected: 6.1.191 , ≤ 6.1.* (semver) Unaffected: 6.6.160 , ≤ 6.6.* (semver) Unaffected: 6.12.111 , ≤ 6.12.* (semver) Unaffected: 6.18.51 , ≤ 6.18.* (semver) Unaffected: 7.2.4 , ≤ 7.2.* (semver) Unaffected: 7.3 , ≤ * (original_commit_for_fix) |
guessed |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-89544",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-16T19:23:33.519592Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-10-16T19:26:42.511Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"net/sunrpc/auth_gss/gss_rpc_xdr.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "ac86b45bb978cd4fdbcaaca82dd0f2337f8e310c",
"status": "affected",
"version": "bb336cd8d5ecb69c430ebe3e7bcff68471d93fa8",
"versionType": "git"
},
{
"lessThan": "3473139d15d67e2fd737cf0613082adb5499362f",
"status": "affected",
"version": "dd292e884c649f9b1c18af0ec75ca90b390cd044",
"versionType": "git"
},
{
"lessThan": "993a9012e68b8667a0a9b316fd718680c7e008a0",
"status": "affected",
"version": "934212a623cbab851848b6de377eb476718c3e4c",
"versionType": "git"
},
{
"lessThan": "8c56a46db3b7523f13e167c3e2c6e3c47a87dcb3",
"status": "affected",
"version": "5e6013ae2c8d420faea553d363935f65badd32c3",
"versionType": "git"
},
{
"lessThan": "fb30241f7ccace372ee83017891549f23a715581",
"status": "affected",
"version": "3cfcfc102a5e57b021b786a755a38935e357797d",
"versionType": "git"
},
{
"lessThan": "3ff45361e9469e85c0f86b8e7b82c63e50bab8ef",
"status": "affected",
"version": "3cfcfc102a5e57b021b786a755a38935e357797d",
"versionType": "git"
},
{
"lessThan": "f85a83774d7f4e2ac71c0c384df0dfb6f7d0179a",
"status": "affected",
"version": "3cfcfc102a5e57b021b786a755a38935e357797d",
"versionType": "git"
},
{
"lessThan": "5e9a94539b1ec17a89177d952badfd0d844d694a",
"status": "affected",
"version": "3cfcfc102a5e57b021b786a755a38935e357797d",
"versionType": "git"
},
{
"status": "affected",
"version": "b97c37978ca825557d331c9012e0c1ddc0e42364",
"versionType": "git"
},
{
"status": "affected",
"version": "bfa9d86d39a0fe4685f90c3529aa9bd62a9d97a8",
"versionType": "git"
},
{
"status": "affected",
"version": "9806c2393cd2ab0a8e7bb9ffae02ce20e3112ec4",
"versionType": "git"
},
{
"status": "affected",
"version": "996997d1fb2126feda550d6adcedcbd94911fc69",
"versionType": "git"
},
{
"lessThan": "5.10.273",
"status": "affected",
"version": "5.10.214",
"versionType": "semver"
},
{
"lessThan": "5.15.224",
"status": "affected",
"version": "5.15.153",
"versionType": "semver"
},
{
"lessThan": "6.1.191",
"status": "affected",
"version": "6.1.83",
"versionType": "semver"
},
{
"lessThan": "6.6.160",
"status": "affected",
"version": "6.6.23",
"versionType": "semver"
},
{
"lessThan": "4.20",
"status": "affected",
"version": "4.19.311",
"versionType": "semver"
},
{
"lessThan": "5.5",
"status": "affected",
"version": "5.4.273",
"versionType": "semver"
},
{
"lessThan": "6.8",
"status": "affected",
"version": "6.7.11",
"versionType": "semver"
},
{
"lessThan": "6.9",
"status": "affected",
"version": "6.8.2",
"versionType": "semver"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"net/sunrpc/auth_gss/gss_rpc_xdr.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "6.9"
},
{
"lessThan": "6.9",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "5.10.*",
"status": "unaffected",
"version": "5.10.273",
"versionType": "semver"
},
{
"lessThanOrEqual": "5.15.*",
"status": "unaffected",
"version": "5.15.224",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.1.*",
"status": "unaffected",
"version": "6.1.191",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"version": "6.6.160",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.111",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.51",
"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.273",
"versionStartIncluding": "5.10.214",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "5.15.224",
"versionStartIncluding": "5.15.153",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.1.191",
"versionStartIncluding": "6.1.83",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.6.160",
"versionStartIncluding": "6.6.23",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.12.111",
"versionStartIncluding": "6.9",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.18.51",
"versionStartIncluding": "6.9",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.2.4",
"versionStartIncluding": "6.9",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.3",
"versionStartIncluding": "6.9",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "4.19.311",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "5.4.273",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.7.11",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.8.2",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nSUNRPC: fix gssx_dec_option_array error path bugs\n\nFour coupled defects in the gssx XDR option-array decoder make the\nerror paths unsafe: a NULL deref in the caller, a refcount leak on\nthe decoded group_info, and a latent use-after-free that the leak\nfix would otherwise expose.\n\ngssx_dec_option_array() sets oa-\u003ecount = 1 before allocating\noa-\u003edata. If that allocation fails, -ENOMEM is returned with\noa-\u003ecount == 1 and oa-\u003edata == NULL. All other error paths jump\nto free_oa: which frees oa-\u003edata and NULLs it but also leaves\noa-\u003ecount == 1. The caller trusts the count:\n\n gssp_accept_sec_context_upcall()\n gssx_dec_accept_sec_context()\n gssx_dec_option_array() /* fails, count=1 data=NULL */\n data = res.options.data[0].value /* NULL deref */\n\nIndependently, free_creds: releases the partially decoded svc_cred\nwith a bare kfree(creds). gssx_dec_linux_creds() installs a\ngroups_alloc() result into creds-\u003ecr_group_info; that object is\nkvmalloc-backed and refcounted, and only put_group_info() reaches\nkvfree(). A plain kfree(creds) drops the wrapper and leaks the\ngroup_info allocation.\n\nThe natural fix for the leak is to call free_svc_cred(creds) before\nkfree(creds), but free_svc_cred() invokes put_group_info() on\ncreds-\u003ecr_group_info unconditionally when non-NULL. The existing\nout_free_groups: path in gssx_dec_linux_creds() already called\ngroups_free() on that pointer without clearing it, so once\nfree_svc_cred() is wired in, the subsequent put_group_info() would\ntouch freed memory.\n\nFix all four together:\n\n - Move the oa-\u003ecount = 1 assignment below the oa-\u003edata allocation\n so it is never set when oa-\u003edata is NULL.\n - Reset oa-\u003ecount to 0 at free_oa: so count and data stay\n coherent and the caller sees an empty option array.\n - Call free_svc_cred(creds) before kfree(creds) at free_creds:\n so the refcounted cr_group_info is released. free_svc_cred()\n either NULL-guards each field explicitly (cr_group_info has\n an if() check) or delegates to a helper that is NULL-safe\n itself (kfree for the string fields, gss_mech_put() which\n guards with if(gm) at gss_mech_switch.c:342), so it is safe\n to call on a partially decoded svc_cred where only\n cr_uid/cr_gid/cr_group_info have been written and everything\n else is zero from kzalloc.\n - In gssx_dec_linux_creds()\u0027s out_free_groups: path, release\n cr_group_info with put_group_info() rather than groups_free()\n so the teardown matches free_svc_cred()\u0027s refcount-aware path,\n and clear the pointer so a later free_svc_cred() on the same\n creds does not release it a second time."
}
],
"metrics": [
{
"cvssV3_1": {
"baseScore": 7.5,
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
},
"scenarios": [
{
"lang": "en",
"value": "AV:N - The decoder runs only as a consequence of an RPCSEC_GSS_INIT/CONTINUE_INIT Call to in-kernel nfsd (and other SUNRPC servers such as lockd) on the network, typically TCP/2049. A remote client drives svcauth_gss_proxy_init() \u2192 gssp_accept_sec_context_upcall() \u2192 gssx_dec_option_array(); the attacker\u2019s reach is purely over the network.\nAC:L - Any allocation or XDR error after oa-\u003ecount is set to 1 leaves count=1 with data=NULL, and the caller always indexes res.options.data[0]. The attacker can induce those failures by flooding pre-auth GSS_INIT upcalls that each pin 256 KB of receive pages (especially under memcg-limited nfsd) and by driving large group-list replies, so success does not depend on conditions beyond their control.\nPR:N - svcauth_gss_proxy_init() runs from svcauth_gss_proc_init() on the first RPCSEC_GSS handshake leg, before the kernel has validated any Kerberos ticket. The upcall and option-array decode execute for an unauthenticated NFS client; no local account or prior credential on the server is required.\nUI:N - The crash is triggered entirely by an inbound RPC to an already-running nfsd/SUNRPC service thread. No administrator or end-user action such as mounting a filesystem or opening a file is required.\nS:U - The NULL dereference and group_info leak occur inside the host kernel\u2019s SUNRPC/GSS code. Impact stays within that kernel\u2019s security authority; no VM, IOMMU, or sandbox boundary is crossed.\nC:N - With oa-\u003ecount==1 and oa-\u003edata==NULL, gssp_accept_sec_context_upcall() does \u0026res.options.data[0].value, a NULL+small-offset load that faults on the unmapped zero page. No kernel memory is returned to the attacker; unlike a UAF, freed object contents are never read.\nI:N - The faulting access is a pure NULL-pointer dereference with no kernel write. The put_group_info() UAF described in the fix is only latent: the unpatched free_creds path kfree()s the svc_cred wrapper without touching cr_group_info, so the dangling pointer is not used.\nA:H - The NULL dereference oopses the nfsd (or lockd) thread and panics the host where panic_on_oops is set, which is typical on NAS/appliance NFS servers. The same error path also leaks the kvmalloc-backed group_info, and the crash can be repeated to take down SUNRPC service threads."
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-30T12:32:07.817Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/ac86b45bb978cd4fdbcaaca82dd0f2337f8e310c"
},
{
"url": "https://git.kernel.org/stable/c/3473139d15d67e2fd737cf0613082adb5499362f"
},
{
"url": "https://git.kernel.org/stable/c/993a9012e68b8667a0a9b316fd718680c7e008a0"
},
{
"url": "https://git.kernel.org/stable/c/8c56a46db3b7523f13e167c3e2c6e3c47a87dcb3"
},
{
"url": "https://git.kernel.org/stable/c/fb30241f7ccace372ee83017891549f23a715581"
},
{
"url": "https://git.kernel.org/stable/c/3ff45361e9469e85c0f86b8e7b82c63e50bab8ef"
},
{
"url": "https://git.kernel.org/stable/c/f85a83774d7f4e2ac71c0c384df0dfb6f7d0179a"
},
{
"url": "https://git.kernel.org/stable/c/5e9a94539b1ec17a89177d952badfd0d844d694a"
}
],
"title": "SUNRPC: fix gssx_dec_option_array error path bugs",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-89544",
"datePublished": "2026-09-11T19:44:20.424Z",
"dateReserved": "2026-09-11T19:38:34.722Z",
"dateUpdated": "2026-10-30T12:32:07.817Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"epss": {
"cve": "CVE-2026-89544",
"date": "2026-11-09",
"epss": "0.00724",
"percentile": "0.54339"
},
"microsoft_vex": {
"current_release_date": "2026-10-24T14:44:00.000Z",
"cve": "CVE-2026-89544",
"id": "msrc_CVE-2026-89544",
"initial_release_date": "2026-09-13T01:14:17.000Z",
"product_status:fixed": "1",
"product_status:known_affected": "3",
"source": "Microsoft CSAF VEX",
"status": "final",
"title": "SUNRPC: fix gssx_dec_option_array error path bugs",
"url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-89544.json",
"version": "5"
},
"nvd": {
"cve": {
"affected": [
{
"affectedData": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"net/sunrpc/auth_gss/gss_rpc_xdr.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "ac86b45bb978cd4fdbcaaca82dd0f2337f8e310c",
"status": "affected",
"version": "bb336cd8d5ecb69c430ebe3e7bcff68471d93fa8",
"versionType": "git"
},
{
"lessThan": "3473139d15d67e2fd737cf0613082adb5499362f",
"status": "affected",
"version": "dd292e884c649f9b1c18af0ec75ca90b390cd044",
"versionType": "git"
},
{
"lessThan": "993a9012e68b8667a0a9b316fd718680c7e008a0",
"status": "affected",
"version": "934212a623cbab851848b6de377eb476718c3e4c",
"versionType": "git"
},
{
"lessThan": "8c56a46db3b7523f13e167c3e2c6e3c47a87dcb3",
"status": "affected",
"version": "5e6013ae2c8d420faea553d363935f65badd32c3",
"versionType": "git"
},
{
"lessThan": "fb30241f7ccace372ee83017891549f23a715581",
"status": "affected",
"version": "3cfcfc102a5e57b021b786a755a38935e357797d",
"versionType": "git"
},
{
"lessThan": "3ff45361e9469e85c0f86b8e7b82c63e50bab8ef",
"status": "affected",
"version": "3cfcfc102a5e57b021b786a755a38935e357797d",
"versionType": "git"
},
{
"lessThan": "f85a83774d7f4e2ac71c0c384df0dfb6f7d0179a",
"status": "affected",
"version": "3cfcfc102a5e57b021b786a755a38935e357797d",
"versionType": "git"
},
{
"lessThan": "5e9a94539b1ec17a89177d952badfd0d844d694a",
"status": "affected",
"version": "3cfcfc102a5e57b021b786a755a38935e357797d",
"versionType": "git"
},
{
"status": "affected",
"version": "b97c37978ca825557d331c9012e0c1ddc0e42364",
"versionType": "git"
},
{
"status": "affected",
"version": "bfa9d86d39a0fe4685f90c3529aa9bd62a9d97a8",
"versionType": "git"
},
{
"status": "affected",
"version": "9806c2393cd2ab0a8e7bb9ffae02ce20e3112ec4",
"versionType": "git"
},
{
"status": "affected",
"version": "996997d1fb2126feda550d6adcedcbd94911fc69",
"versionType": "git"
},
{
"lessThan": "5.10.273",
"status": "affected",
"version": "5.10.214",
"versionType": "semver"
},
{
"lessThan": "5.15.224",
"status": "affected",
"version": "5.15.153",
"versionType": "semver"
},
{
"lessThan": "6.1.191",
"status": "affected",
"version": "6.1.83",
"versionType": "semver"
},
{
"lessThan": "6.6.160",
"status": "affected",
"version": "6.6.23",
"versionType": "semver"
},
{
"lessThan": "4.20",
"status": "affected",
"version": "4.19.311",
"versionType": "semver"
},
{
"lessThan": "5.5",
"status": "affected",
"version": "5.4.273",
"versionType": "semver"
},
{
"lessThan": "6.8",
"status": "affected",
"version": "6.7.11",
"versionType": "semver"
},
{
"lessThan": "6.9",
"status": "affected",
"version": "6.8.2",
"versionType": "semver"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"net/sunrpc/auth_gss/gss_rpc_xdr.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "6.9"
},
{
"lessThan": "6.9",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "5.10.*",
"status": "unaffected",
"version": "5.10.273",
"versionType": "semver"
},
{
"lessThanOrEqual": "5.15.*",
"status": "unaffected",
"version": "5.15.224",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.1.*",
"status": "unaffected",
"version": "6.1.191",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"version": "6.6.160",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.111",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.51",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.2.*",
"status": "unaffected",
"version": "7.2.4",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.3",
"versionType": "original_commit_for_fix"
}
]
}
],
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}
],
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nSUNRPC: fix gssx_dec_option_array error path bugs\n\nFour coupled defects in the gssx XDR option-array decoder make the\nerror paths unsafe: a NULL deref in the caller, a refcount leak on\nthe decoded group_info, and a latent use-after-free that the leak\nfix would otherwise expose.\n\ngssx_dec_option_array() sets oa-\u003ecount = 1 before allocating\noa-\u003edata. If that allocation fails, -ENOMEM is returned with\noa-\u003ecount == 1 and oa-\u003edata == NULL. All other error paths jump\nto free_oa: which frees oa-\u003edata and NULLs it but also leaves\noa-\u003ecount == 1. The caller trusts the count:\n\n gssp_accept_sec_context_upcall()\n gssx_dec_accept_sec_context()\n gssx_dec_option_array() /* fails, count=1 data=NULL */\n data = res.options.data[0].value /* NULL deref */\n\nIndependently, free_creds: releases the partially decoded svc_cred\nwith a bare kfree(creds). gssx_dec_linux_creds() installs a\ngroups_alloc() result into creds-\u003ecr_group_info; that object is\nkvmalloc-backed and refcounted, and only put_group_info() reaches\nkvfree(). A plain kfree(creds) drops the wrapper and leaks the\ngroup_info allocation.\n\nThe natural fix for the leak is to call free_svc_cred(creds) before\nkfree(creds), but free_svc_cred() invokes put_group_info() on\ncreds-\u003ecr_group_info unconditionally when non-NULL. The existing\nout_free_groups: path in gssx_dec_linux_creds() already called\ngroups_free() on that pointer without clearing it, so once\nfree_svc_cred() is wired in, the subsequent put_group_info() would\ntouch freed memory.\n\nFix all four together:\n\n - Move the oa-\u003ecount = 1 assignment below the oa-\u003edata allocation\n so it is never set when oa-\u003edata is NULL.\n - Reset oa-\u003ecount to 0 at free_oa: so count and data stay\n coherent and the caller sees an empty option array.\n - Call free_svc_cred(creds) before kfree(creds) at free_creds:\n so the refcounted cr_group_info is released. free_svc_cred()\n either NULL-guards each field explicitly (cr_group_info has\n an if() check) or delegates to a helper that is NULL-safe\n itself (kfree for the string fields, gss_mech_put() which\n guards with if(gm) at gss_mech_switch.c:342), so it is safe\n to call on a partially decoded svc_cred where only\n cr_uid/cr_gid/cr_group_info have been written and everything\n else is zero from kzalloc.\n - In gssx_dec_linux_creds()\u0027s out_free_groups: path, release\n cr_group_info with put_group_info() rather than groups_free()\n so the teardown matches free_svc_cred()\u0027s refcount-aware path,\n and clear the pointer so a later free_svc_cred() on the same\n creds does not release it a second time."
}
],
"id": "CVE-2026-89544",
"lastModified": "2026-10-30T13:20:20.797",
"metrics": {
"cvssMetricV31": [
{
"cvssData": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
},
"exploitabilityScore": 3.9,
"impactScore": 3.6,
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"type": "Secondary"
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"id": "CVE-2026-89544",
"options": [
{
"exploitation": "none"
},
{
"automatable": "yes"
},
{
"technicalImpact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-16T19:23:33.519592Z",
"version": "2.0.3"
}
}
]
},
"published": "2026-09-11T20:19:37.670",
"references": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/3473139d15d67e2fd737cf0613082adb5499362f"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/3ff45361e9469e85c0f86b8e7b82c63e50bab8ef"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/5e9a94539b1ec17a89177d952badfd0d844d694a"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/8c56a46db3b7523f13e167c3e2c6e3c47a87dcb3"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/993a9012e68b8667a0a9b316fd718680c7e008a0"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/ac86b45bb978cd4fdbcaaca82dd0f2337f8e310c"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/f85a83774d7f4e2ac71c0c384df0dfb6f7d0179a"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/fb30241f7ccace372ee83017891549f23a715581"
}
],
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"vulnStatus": "Received"
}
},
"redhat_vex": {
"aggregate_severity": "Moderate",
"current_release_date": "2026-11-07T04:49:57+00:00",
"cve": "CVE-2026-89544",
"id": "CVE-2026-89544",
"initial_release_date": "2026-09-11T00:00:00+00:00",
"product_status:known_affected": "158",
"product_status:known_not_affected": "45",
"source": "Red Hat CSAF VEX",
"status": "final",
"title": "kernel: SUNRPC: fix gssx_dec_option_array error path bugs",
"url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89544.json",
"version": "3"
},
"vulnrichment": {
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-89544",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-16T19:23:33.519592Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-10-16T19:23:34.327Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"net/sunrpc/auth_gss/gss_rpc_xdr.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "8c56a46db3b7523f13e167c3e2c6e3c47a87dcb3",
"status": "affected",
"version": "5e6013ae2c8d420faea553d363935f65badd32c3",
"versionType": "git"
},
{
"lessThan": "fb30241f7ccace372ee83017891549f23a715581",
"status": "affected",
"version": "3cfcfc102a5e57b021b786a755a38935e357797d",
"versionType": "git"
},
{
"lessThan": "3ff45361e9469e85c0f86b8e7b82c63e50bab8ef",
"status": "affected",
"version": "3cfcfc102a5e57b021b786a755a38935e357797d",
"versionType": "git"
},
{
"lessThan": "f85a83774d7f4e2ac71c0c384df0dfb6f7d0179a",
"status": "affected",
"version": "3cfcfc102a5e57b021b786a755a38935e357797d",
"versionType": "git"
},
{
"lessThan": "5e9a94539b1ec17a89177d952badfd0d844d694a",
"status": "affected",
"version": "3cfcfc102a5e57b021b786a755a38935e357797d",
"versionType": "git"
},
{
"status": "affected",
"version": "b97c37978ca825557d331c9012e0c1ddc0e42364",
"versionType": "git"
},
{
"status": "affected",
"version": "bfa9d86d39a0fe4685f90c3529aa9bd62a9d97a8",
"versionType": "git"
},
{
"status": "affected",
"version": "bb336cd8d5ecb69c430ebe3e7bcff68471d93fa8",
"versionType": "git"
},
{
"status": "affected",
"version": "dd292e884c649f9b1c18af0ec75ca90b390cd044",
"versionType": "git"
},
{
"status": "affected",
"version": "934212a623cbab851848b6de377eb476718c3e4c",
"versionType": "git"
},
{
"status": "affected",
"version": "9806c2393cd2ab0a8e7bb9ffae02ce20e3112ec4",
"versionType": "git"
},
{
"status": "affected",
"version": "996997d1fb2126feda550d6adcedcbd94911fc69",
"versionType": "git"
},
{
"lessThan": "6.6.160",
"status": "affected",
"version": "6.6.23",
"versionType": "semver"
},
{
"lessThan": "4.20",
"status": "affected",
"version": "4.19.311",
"versionType": "semver"
},
{
"lessThan": "5.5",
"status": "affected",
"version": "5.4.273",
"versionType": "semver"
},
{
"lessThan": "5.11",
"status": "affected",
"version": "5.10.214",
"versionType": "semver"
},
{
"lessThan": "5.16",
"status": "affected",
"version": "5.15.153",
"versionType": "semver"
},
{
"lessThan": "6.2",
"status": "affected",
"version": "6.1.83",
"versionType": "semver"
},
{
"lessThan": "6.8",
"status": "affected",
"version": "6.7.11",
"versionType": "semver"
},
{
"lessThan": "6.9",
"status": "affected",
"version": "6.8.2",
"versionType": "semver"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"net/sunrpc/auth_gss/gss_rpc_xdr.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "6.9"
},
{
"lessThan": "6.9",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"version": "6.6.160",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.111",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.51",
"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": "6.6.160",
"versionStartIncluding": "6.6.23",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.12.111",
"versionStartIncluding": "6.9",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.18.51",
"versionStartIncluding": "6.9",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.2.4",
"versionStartIncluding": "6.9",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.3",
"versionStartIncluding": "6.9",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "4.19.311",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "5.4.273",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "5.10.214",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "5.15.153",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.1.83",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.7.11",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.8.2",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nSUNRPC: fix gssx_dec_option_array error path bugs\n\nFour coupled defects in the gssx XDR option-array decoder make the\nerror paths unsafe: a NULL deref in the caller, a refcount leak on\nthe decoded group_info, and a latent use-after-free that the leak\nfix would otherwise expose.\n\ngssx_dec_option_array() sets oa-\u003ecount = 1 before allocating\noa-\u003edata. If that allocation fails, -ENOMEM is returned with\noa-\u003ecount == 1 and oa-\u003edata == NULL. All other error paths jump\nto free_oa: which frees oa-\u003edata and NULLs it but also leaves\noa-\u003ecount == 1. The caller trusts the count:\n\n gssp_accept_sec_context_upcall()\n gssx_dec_accept_sec_context()\n gssx_dec_option_array() /* fails, count=1 data=NULL */\n data = res.options.data[0].value /* NULL deref */\n\nIndependently, free_creds: releases the partially decoded svc_cred\nwith a bare kfree(creds). gssx_dec_linux_creds() installs a\ngroups_alloc() result into creds-\u003ecr_group_info; that object is\nkvmalloc-backed and refcounted, and only put_group_info() reaches\nkvfree(). A plain kfree(creds) drops the wrapper and leaks the\ngroup_info allocation.\n\nThe natural fix for the leak is to call free_svc_cred(creds) before\nkfree(creds), but free_svc_cred() invokes put_group_info() on\ncreds-\u003ecr_group_info unconditionally when non-NULL. The existing\nout_free_groups: path in gssx_dec_linux_creds() already called\ngroups_free() on that pointer without clearing it, so once\nfree_svc_cred() is wired in, the subsequent put_group_info() would\ntouch freed memory.\n\nFix all four together:\n\n - Move the oa-\u003ecount = 1 assignment below the oa-\u003edata allocation\n so it is never set when oa-\u003edata is NULL.\n - Reset oa-\u003ecount to 0 at free_oa: so count and data stay\n coherent and the caller sees an empty option array.\n - Call free_svc_cred(creds) before kfree(creds) at free_creds:\n so the refcounted cr_group_info is released. free_svc_cred()\n either NULL-guards each field explicitly (cr_group_info has\n an if() check) or delegates to a helper that is NULL-safe\n itself (kfree for the string fields, gss_mech_put() which\n guards with if(gm) at gss_mech_switch.c:342), so it is safe\n to call on a partially decoded svc_cred where only\n cr_uid/cr_gid/cr_group_info have been written and everything\n else is zero from kzalloc.\n - In gssx_dec_linux_creds()\u0027s out_free_groups: path, release\n cr_group_info with put_group_info() rather than groups_free()\n so the teardown matches free_svc_cred()\u0027s refcount-aware path,\n and clear the pointer so a later free_svc_cred() on the same\n creds does not release it a second time."
}
],
"metrics": [
{
"cvssV3_1": {
"baseScore": 7.5,
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
},
"scenarios": [
{
"lang": "en",
"value": "AV:N - The decoder runs only as a consequence of an RPCSEC_GSS_INIT/CONTINUE_INIT Call to in-kernel nfsd (and other SUNRPC servers such as lockd) on the network, typically TCP/2049. A remote client drives svcauth_gss_proxy_init() \u2192 gssp_accept_sec_context_upcall() \u2192 gssx_dec_option_array(); the attacker\u2019s reach is purely over the network.\nAC:L - Any allocation or XDR error after oa-\u003ecount is set to 1 leaves count=1 with data=NULL, and the caller always indexes res.options.data[0]. The attacker can induce those failures by flooding pre-auth GSS_INIT upcalls that each pin 256 KB of receive pages (especially under memcg-limited nfsd) and by driving large group-list replies, so success does not depend on conditions beyond their control.\nPR:N - svcauth_gss_proxy_init() runs from svcauth_gss_proc_init() on the first RPCSEC_GSS handshake leg, before the kernel has validated any Kerberos ticket. The upcall and option-array decode execute for an unauthenticated NFS client; no local account or prior credential on the server is required.\nUI:N - The crash is triggered entirely by an inbound RPC to an already-running nfsd/SUNRPC service thread. No administrator or end-user action such as mounting a filesystem or opening a file is required.\nS:U - The NULL dereference and group_info leak occur inside the host kernel\u2019s SUNRPC/GSS code. Impact stays within that kernel\u2019s security authority; no VM, IOMMU, or sandbox boundary is crossed.\nC:N - With oa-\u003ecount==1 and oa-\u003edata==NULL, gssp_accept_sec_context_upcall() does \u0026res.options.data[0].value, a NULL+small-offset load that faults on the unmapped zero page. No kernel memory is returned to the attacker; unlike a UAF, freed object contents are never read.\nI:N - The faulting access is a pure NULL-pointer dereference with no kernel write. The put_group_info() UAF described in the fix is only latent: the unpatched free_creds path kfree()s the svc_cred wrapper without touching cr_group_info, so the dangling pointer is not used.\nA:H - The NULL dereference oopses the nfsd (or lockd) thread and panics the host where panic_on_oops is set, which is typical on NAS/appliance NFS servers. The same error path also leaks the kvmalloc-backed group_info, and the crash can be repeated to take down SUNRPC service threads."
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-21T12:47:49.203Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/8c56a46db3b7523f13e167c3e2c6e3c47a87dcb3"
},
{
"url": "https://git.kernel.org/stable/c/fb30241f7ccace372ee83017891549f23a715581"
},
{
"url": "https://git.kernel.org/stable/c/3ff45361e9469e85c0f86b8e7b82c63e50bab8ef"
},
{
"url": "https://git.kernel.org/stable/c/f85a83774d7f4e2ac71c0c384df0dfb6f7d0179a"
},
{
"url": "https://git.kernel.org/stable/c/5e9a94539b1ec17a89177d952badfd0d844d694a"
}
],
"title": "SUNRPC: fix gssx_dec_option_array error path bugs",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-89544",
"datePublished": "2026-09-11T19:44:20.424Z",
"dateReserved": "2026-09-11T19:38:34.722Z",
"dateUpdated": "2026-10-21T12:47:49.203Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
}
}
Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.
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.
Vulnerability timeline
Sightings and recorded dates, grouped by day · UTC
How durations are calculated
Following the VTEM framework (Black Hat USA 2015), time to patch starts when the vendor or a coordinator was informed, total time to patch at discovery, and disclosure to patch at public disclosure; vendor response time runs from the report to its acknowledgement. Time to exploit and time unpatched start at the earliest discovery or report, falling back to public disclosure. Unpatched time ends at the first recorded patch, or the calculation time when no patch is recorded. Exploitation to patch shows the interval between those two events; a published proof of concept is a public exploit, not exploitation.
Each result shows its source dates. A negative interval means the end event came first; when date-only inputs leave the order open, the result says so. Date-only inputs are approximate. The earliest evidence wins: KEV report dates and sightings are labelled as such. Records describing another vulnerability are listed but never calculated from, and a PoC alone does not establish exploitation. Missing patch evidence does not prove that no patch exists. Filters below change the event list only.
Loading timeline…
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
Related by attack behaviour
Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.