{
    "dataType": "CVE_RECORD",
    "dataVersion": "5.2",
    "cveMetadata": {
        "cveId": "CVE-2026-93095",
        "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "state": "PUBLISHED",
        "assignerShortName": "Linux",
        "dateReserved": "2026-09-17T16:02:15.084Z",
        "datePublished": "2026-09-17T16:11:09.694Z",
        "dateUpdated": "2026-10-19T09:05:28.487Z"
    },
    "containers": {
        "cna": {
            "providerMetadata": {
                "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
                "shortName": "Linux",
                "dateUpdated": "2026-10-19T09:05:28.487Z"
            },
            "descriptions": [
                {
                    "lang": "en",
                    "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nhfsplus: validate thread record before delete key rebuild\n\nhfsplus_delete_cat() is called with str == NULL when the last open\nreference to an unlinked HFS+ hardlink backing inode is closed. In that\ncase, the function finds the catalog thread by CNID and rebuilds the\ncatalog key from thread.nodeName.\n\nThat reconstruction path reads thread.nodeName.length directly from the\ncatalog B-tree into fd.search_key and then copies length * 2 bytes into\nfd.search_key->cat.name.unicode. It does not first check that the found\nrecord is a thread record or that its size matches the thread name.\n\nA corrupted image can therefore provide an oversized thread name length\nand make hfs_bnode_read() write past the catalog search-key allocation.\n\nRead the CNID record through hfsplus_brec_read_cat(), which bounds the\nrecord read to sizeof(hfsplus_cat_entry) and verifies that a thread\nrecord's size exactly matches nodeName.length. Together, these checks\nensure an accepted thread name fits HFSPLUS_MAX_STRLEN. Reject non-thread\nrecords before building the delete key from the validated thread name.\n\nShare the thread-record-type helper between hfsplus_find_cat() and\nhfsplus_delete_cat()."
                }
            ],
            "metrics": [
                {
                    "cvssV3_1": {
                        "version": "3.1",
                        "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
                        "baseScore": 7.8,
                        "baseSeverity": "HIGH"
                    },
                    "scenarios": [
                        {
                            "lang": "en",
                            "value": "AV:L - The malformed value is on-disk catalog thread.nodeName.length. unlink(2) reaches it via do_unlinkat → vfs_unlink → hfsplus_unlink, and close via hfsplus_file_release; both call hfsplus_delete_cat() with str==NULL so hfs_bnode_read() copies that length into fd.search_key. This is local block/loop/USB VFS data, not a ksmbd/nfsd/packet field.\nAC:L - A crafted HFS+ catalog thread with nodeName.length above HFSPLUS_MAX_STRLEN (255) makes hfs_bnode_read() write length*2 bytes into fd.search_key->cat.name.unicode, which hfs_find_init() allocated as only cat_tree->max_key_len*2+4 bytes (~1036). The overflow is deterministic on unlink/close of that hardlink backing inode; no race or uninfluenced layout is required.\nPR:L - hfsplus_fs_type is FS_REQUIRES_DEV without FS_USERNS_MOUNT, so raw mount(2) needs CAP_SYS_ADMIN, but the highest-impact case is an unprivileged user whose USB/loop HFS+ image is mounted by udisks2/polkit or a desktop automounter. After mount, may_delete_dentry only requires MAY_WRITE|MAY_EXEC on the attacker-owned directory.\nUI:N - The attacker supplies the crafted volume and then issues unlink(2) or close on the hardlink themselves. Automount of that local/removable image is not a separate victim action once the vector is Local.\nS:U - The hfs_find_init() kmalloc overflow and any resulting kernel memory corruption stay inside the host kernel that is parsing the HFS+ catalog B-tree. No KVM/Xen guest-to-host, IOMMU, or sandbox boundary is crossed.\nC:H - hfs_bnode_read() copies attacker-chosen catalog bytes past the search-key object into adjacent heap. That out-of-bounds write is a memory-corruption primitive that can be leveraged for arbitrary kernel-memory disclosure.\nI:H - The same unbounded write from hfs_bnode_read() into the hfs_find_init() search-key allocation overwrites neighboring slab objects, which is sufficient for an arbitrary kernel write and control-flow hijacking.\nA:H - Writing past the ~1036-byte search-key object oopses or panics the kernel (slab-out-of-bounds or GP fault) while cat_tree->tree_lock is held, crashing the machine or wedging further HFS+ operations."
                        }
                    ]
                }
            ],
            "affected": [
                {
                    "product": "Linux",
                    "vendor": "Linux",
                    "defaultStatus": "unaffected",
                    "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                    "programFiles": [
                        "fs/hfsplus/catalog.c",
                        "fs/hfsplus/hfsplus_fs.h"
                    ],
                    "versions": [
                        {
                            "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
                            "lessThan": "33cda0036bc683fc888c20b04a5fc030e3e8413b",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
                            "lessThan": "b9729c51a8b67f8b20b8a8cf395da4be63a0c15b",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
                            "lessThan": "af48abc1b00d865c3f4c4d76b901c44115cb7162",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
                            "lessThan": "e20f3b749ad241df77ec1c3e13a9c22209aa1eb3",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
                            "lessThan": "7898beee166c1145c0bca364d687b8437435bf1a",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
                            "lessThan": "e31985c67ba00a59d9b1340af473c1dbe6c87856",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
                            "lessThan": "473ea7aa35615829f0de7a71e8691d69dc24e328",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
                            "lessThan": "e2ea5cac61acfc11dad22f1d2d4bc71d56c52a20",
                            "status": "affected",
                            "versionType": "git"
                        }
                    ]
                },
                {
                    "product": "Linux",
                    "vendor": "Linux",
                    "defaultStatus": "affected",
                    "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                    "programFiles": [
                        "fs/hfsplus/catalog.c",
                        "fs/hfsplus/hfsplus_fs.h"
                    ],
                    "versions": [
                        {
                            "version": "2.6.12",
                            "status": "affected"
                        },
                        {
                            "version": "0",
                            "lessThan": "2.6.12",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "5.10.270",
                            "lessThanOrEqual": "5.10.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "5.15.221",
                            "lessThanOrEqual": "5.15.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.1.188",
                            "lessThanOrEqual": "6.1.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.6.157",
                            "lessThanOrEqual": "6.6.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.12.110",
                            "lessThanOrEqual": "6.12.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.18.52",
                            "lessThanOrEqual": "6.18.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "7.2.6",
                            "lessThanOrEqual": "7.2.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "7.3",
                            "lessThanOrEqual": "*",
                            "status": "unaffected",
                            "versionType": "original_commit_for_fix"
                        }
                    ]
                }
            ],
            "cpeApplicability": [
                {
                    "nodes": [
                        {
                            "operator": "OR",
                            "negate": false,
                            "cpeMatch": [
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "2.6.12",
                                    "versionEndExcluding": "5.10.270"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "2.6.12",
                                    "versionEndExcluding": "5.15.221"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "2.6.12",
                                    "versionEndExcluding": "6.1.188"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "2.6.12",
                                    "versionEndExcluding": "6.6.157"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "2.6.12",
                                    "versionEndExcluding": "6.12.110"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "2.6.12",
                                    "versionEndExcluding": "6.18.52"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "2.6.12",
                                    "versionEndExcluding": "7.2.6"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "2.6.12",
                                    "versionEndExcluding": "7.3"
                                }
                            ]
                        }
                    ]
                }
            ],
            "references": [
                {
                    "url": "https://git.kernel.org/stable/c/33cda0036bc683fc888c20b04a5fc030e3e8413b"
                },
                {
                    "url": "https://git.kernel.org/stable/c/b9729c51a8b67f8b20b8a8cf395da4be63a0c15b"
                },
                {
                    "url": "https://git.kernel.org/stable/c/af48abc1b00d865c3f4c4d76b901c44115cb7162"
                },
                {
                    "url": "https://git.kernel.org/stable/c/e20f3b749ad241df77ec1c3e13a9c22209aa1eb3"
                },
                {
                    "url": "https://git.kernel.org/stable/c/7898beee166c1145c0bca364d687b8437435bf1a"
                },
                {
                    "url": "https://git.kernel.org/stable/c/e31985c67ba00a59d9b1340af473c1dbe6c87856"
                },
                {
                    "url": "https://git.kernel.org/stable/c/473ea7aa35615829f0de7a71e8691d69dc24e328"
                },
                {
                    "url": "https://git.kernel.org/stable/c/e2ea5cac61acfc11dad22f1d2d4bc71d56c52a20"
                }
            ],
            "title": "hfsplus: validate thread record before delete key rebuild",
            "x_generator": {
                "engine": "bippy-1.2.0"
            }
        }
    }
}