libceph: Avoid using invalid osd indices from primary_temp
In the Linux kernel, the following vulnerability has been resolved: libceph: Avoid using invalid osd indices from primary_temp A corrupted osdmap received from a Ceph monitor or OSD may contain osd indices in its pg_temp, primary_temp, pg_upmap, and pg_upmap_items parts that don't exist, i.e., that are greater than max_osd or smaller than CEPH_HOMELESS_OSD (-1). These indices are used to create the up and acting set in ceph_pg_to_up_acting_osds(), called from calc_target(). While most of these osd indices are checked, the one from primary_temp is not. Subsequently, this may lead to calc_target() returning this (potentially invalid) index as target osd for a (linger) request. Because the osd_state, osd_weight, and osd_addr arrays only contain max_osd entries (with indices 0 to max_osd -1), this leads to out-of-bounds accesses when trying to read values from these arrays. This patch fixes the issue by adding a check to get_temp_osds(), so that only valid osd indices from primary_temp are used, and it falls back to using the primary from pg_temp or the up set if it is invalid. [ idryomov: changelog ]
- Products
- Kernel
- Affected versions
- Not specified
- Fixed versions
- 5.10.266, 5.15.217, 6.1.184, 6.12.105, 6.18.46, 6.6.153, 7.1.10
- CVEs
- CVE-2026-80558
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 2 Nov 2026, 19:45 UTC · Revision 1
Source evidence
libceph: Avoid using invalid osd indices from primary_temp
core-osv · Original sourcePublished 26 Aug 2026, 14:37 UTC
In the Linux kernel, the following vulnerability has been resolved: libceph: Avoid using invalid osd indices from primary_temp A corrupted osdmap received from a Ceph monitor or OSD may contain osd indices in its pg_temp, primary_temp, pg_upmap, and pg_upmap_items parts that don't exist, i.e., that are greater than max_osd or smaller than CEPH_HOMELESS_OSD (-1). These indices are used to create the up and acting set in ceph_pg_to_up_acting_osds(), called from calc_target(). While most of these osd indices are checked, the one from primary_temp is not. Subsequently, this may lead to calc_target() returning this (potentially invalid) index as target osd for a (linger) request. Because the osd_state, osd_weight, and osd_addr arrays only contain max_osd entries (with indices 0 to max_osd -1), this leads to out-of-bounds accesses when trying to read values from these arrays. This patch fixes the issue by adding a check to get_temp_osds(), so that only valid osd indices from primary_temp are used, and it falls back to using the primary from pg_temp or the up set if it is invalid. [ idryomov: changelog ]
osv:CVE-2026-80558
Kernel
Fixed versions: 5.10.266, 5.15.217, 6.1.184, 6.6.153, 6.12.105, 6.18.46, 7.1.10
Complete source record
{
"id": "5b93e37f4c3575ba66c31879f0bc83c75b503eff48a6ce6c1fa197b4248820cd",
"url": "https://osv.dev/vulnerability/CVE-2026-80558",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "libceph: Avoid using invalid osd indices from primary_temp",
"summary": "In the Linux kernel, the following vulnerability has been resolved: libceph: Avoid using invalid osd indices from primary_temp A corrupted osdmap received from a Ceph monitor or OSD may contain osd indices in its pg_temp, primary_temp, pg_upmap, and pg_upmap_items parts that don't exist, i.e., that are greater than max_osd or smaller than CEPH_HOMELESS_OSD (-1). These indices are used to create the up and acting set in ceph_pg_to_up_acting_osds(), called from calc_target(). While most of these osd indices are checked, the one from primary_temp is not. Subsequently, this may lead to calc_target() returning this (potentially invalid) index as target osd for a (linger) request. Because the osd_state, osd_weight, and osd_addr arrays only contain max_osd entries (with indices 0 to max_osd -1), this leads to out-of-bounds accesses when trying to read values from these arrays. This patch fixes the issue by adding a check to get_temp_osds(), so that only valid osd indices from primary_temp are used, and it falls back to using the primary from pg_temp or the up set if it is invalid. [ idryomov: changelog ]",
"evidence": "osv:CVE-2026-80558",
"products": [
{
"name": {
"value": "Kernel",
"evidence": "/affected/1/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "5.10.266",
"evidence": "/affected/1/ranges"
},
{
"value": "5.15.217",
"evidence": "/affected/1/ranges"
},
{
"value": "6.1.184",
"evidence": "/affected/1/ranges"
},
{
"value": "6.6.153",
"evidence": "/affected/1/ranges"
},
{
"value": "6.12.105",
"evidence": "/affected/1/ranges"
},
{
"value": "6.18.46",
"evidence": "/affected/1/ranges"
},
{
"value": "7.1.10",
"evidence": "/affected/1/ranges"
}
],
"affected_versions": []
}
],
"severity": "critical",
"structured": {
"id": "CVE-2026-80558",
"aliases": [
"CVE-2026-80558"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"type": "GIT",
"events": [
{
"introduced": "5e8d4d36bf23bb7baf027c479d54395840219928"
},
{
"fixed": "505fc50b8ff8e687b7e3ef6866269dea27366224"
},
{
"fixed": "1c705fe8e59c6b16f48964973fb23c8ec4735b73"
},
{
"fixed": "dfe1877d351b99eb1b1a62a3fc2d174220e88e20"
},
{
"fixed": "e2ffeec85201b2bb748e99e12539ee1b92f62796"
},
{
"fixed": "6799d4a916ffcb3d450d8440f9fe0f0862f768d6"
},
{
"fixed": "4f392fec075562dc93bb0c69f37423ca2af9b48f"
},
{
"fixed": "e009c5f0ad634c62f5c48a41f1f3c019ecf52555"
},
{
"fixed": "3660b98d1204b419f6a77e9a295f148dcf38d042"
}
]
}
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-80558.json"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "3.15.0"
},
{
"fixed": "5.10.266"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "5.11.0"
},
{
"fixed": "5.15.217"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "5.16.0"
},
{
"fixed": "6.1.184"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.2.0"
},
{
"fixed": "6.6.153"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.7.0"
},
{
"fixed": "6.12.105"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.13.0"
},
{
"fixed": "6.18.46"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.19.0"
},
{
"fixed": "7.1.10"
}
]
}
],
"package": {
"name": "Kernel",
"ecosystem": "Linux"
},
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-80558.json"
}
}
],
"modified": "2026-10-28T02:30:22.904938385Z",
"provider": "osv",
"references": [
"https://git.kernel.org/stable/c/1c705fe8e59c6b16f48964973fb23c8ec4735b73",
"https://git.kernel.org/stable/c/3660b98d1204b419f6a77e9a295f148dcf38d042",
"https://git.kernel.org/stable/c/4f392fec075562dc93bb0c69f37423ca2af9b48f",
"https://git.kernel.org/stable/c/505fc50b8ff8e687b7e3ef6866269dea27366224",
"https://git.kernel.org/stable/c/6799d4a916ffcb3d450d8440f9fe0f0862f768d6",
"https://git.kernel.org/stable/c/dfe1877d351b99eb1b1a62a3fc2d174220e88e20",
"https://git.kernel.org/stable/c/e009c5f0ad634c62f5c48a41f1f3c019ecf52555",
"https://git.kernel.org/stable/c/e2ffeec85201b2bb748e99e12539ee1b92f62796",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/80xxx/CVE-2026-80558.json",
"https://nvd.nist.gov/vuln/detail/CVE-2026-80558",
"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git"
],
"provider_metadata": {
"cna_assigner": "Linux",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/80xxx/CVE-2026-80558.json"
}
},
"related_cves": [
{
"value": "CVE-2026-80558",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 489309,
"published_at": "2026-08-26T14:37:24.768+00:00"
}