← Back to CVE Explorer

CVE-2026-98215

Full vulnerability record from the local CVENow database.

Description

In the Linux kernel, the following vulnerability has been resolved: selinux: preserve user SID across nested backing files SELinux saves the user file SID in a backing-file security blob so it remains available after mmap() replaces vma->vm_file with a backing file. For nested backing files (overlayfs over overlayfs, or FUSE passthrough backed by overlayfs), user_file may itself be a backing file. Its fsec->sid is the SID of the mounter that opened it, rather than the user that opened the top-level file. mprotect() then checks fd { use } against the mounter SID. This can incorrectly deny access without a domain transition, or check the wrong target SID after one. Copy the saved user SID when user_file is a backing file. Keep using the regular file SID for the first backing layer. With two nested overlayfs mounts and SELinux enforcing, mprotect(PROT_READ) returns EACCES with an fd { use } denial against the mounter SID. With this change, mprotect() succeeds. Tested on arm64 QEMU with a small BusyBox initramfs and a purpose-built SELinux policy. The original test was also repeated with Fedora Cloud Base 44 userspace and gave the same result.

Severity
Not scored
CVSS score
Not available
Vulnerability status
Received
Source identifier
416baaa9-dc9f-4396-8d5f-8c081fb06d67
Published
2026-10-06 09:18:08.107000
Last modified
2026-10-19 10:18:22.230000
View original CVE JSON
{
  "id": "CVE-2026-98215",
  "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
  "published": "2026-10-06T09:18:08.107",
  "lastModified": "2026-10-19T10:18:22.230",
  "vulnStatus": "Received",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nselinux: preserve user SID across nested backing files\n\nSELinux saves the user file SID in a backing-file security blob so it\nremains available after mmap() replaces vma->vm_file with a backing file.\n\nFor nested backing files (overlayfs over overlayfs, or FUSE passthrough\nbacked by overlayfs), user_file may itself be a backing file.  Its\nfsec->sid is the SID of the mounter that opened it, rather than the user\nthat opened the top-level file.  mprotect() then checks fd { use } against\nthe mounter SID.  This can incorrectly deny access without a domain\ntransition, or check the wrong target SID after one.\n\nCopy the saved user SID when user_file is a backing file.  Keep using the\nregular file SID for the first backing layer.\n\nWith two nested overlayfs mounts and SELinux enforcing,\nmprotect(PROT_READ) returns EACCES with an fd { use } denial against the\nmounter SID.  With this change, mprotect() succeeds.\n\nTested on arm64 QEMU with a small BusyBox initramfs and a purpose-built\nSELinux policy.  The original test was also repeated with Fedora Cloud\nBase 44 userspace and gave the same result."
    }
  ],
  "affected": [
    {
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
      "affectedData": [
        {
          "vendor": "Linux",
          "product": "Linux",
          "defaultStatus": "unaffected",
          "programFiles": [
            "security/selinux/hooks.c",
            "security/selinux/include/objsec.h"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "versions": [
            {
              "version": "bc6c380c1159de52a252ed11f19a42c47f60a735",
              "lessThan": "caa1b913d90d5dc07073733326d2af0f0288f089",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "8bacd09f12c27710228562e4d13163e58c5f4a45",
              "lessThan": "6aaeec59aadcd1eafc18b049f1b759fb6b9d9569",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "d844702198395d3f80222777030f69db6be6b709",
              "lessThan": "9d99b770e7b67b00bdef9005b928aad13e1d679b",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "82544d36b1729153c8aeb179e84750f0c085d3b1",
              "lessThan": "ff20d16b2e8230c034e21540043df47222dcc09b",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "82544d36b1729153c8aeb179e84750f0c085d3b1",
              "lessThan": "8c0c602202b9a4909b00bc3354e3c0355bc69e65",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "cd0e707a927a70cdfd8bc5a512a9719a87f5ed51",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "6.6.144",
              "lessThan": "6.6.158",
              "versionType": "semver",
              "status": "affected"
            },
            {
              "version": "6.12.95",
              "lessThan": "6.12.112",
              "versionType": "semver",
              "status": "affected"
            },
            {
              "version": "6.18.38",
              "lessThan": "6.18.54",
              "versionType": "semver",
              "status": "affected"
            },
            {
              "version": "7.0.4",
              "lessThan": "7.1",
              "versionType": "semver",
              "status": "affected"
            }
          ]
        },
        {
          "vendor": "Linux",
          "product": "Linux",
          "defaultStatus": "affected",
          "programFiles": [
            "security/selinux/hooks.c",
            "security/selinux/include/objsec.h"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "versions": [
            {
              "version": "7.1",
              "status": "affected"
            },
            {
              "version": "0",
              "lessThan": "7.1",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "6.6.158",
              "lessThanOrEqual": "6.6.*",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "6.12.112",
              "lessThanOrEqual": "6.12.*",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "6.18.54",
              "lessThanOrEqual": "6.18.*",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "7.2.8",
              "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/6aaeec59aadcd1eafc18b049f1b759fb6b9d9569",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/8c0c602202b9a4909b00bc3354e3c0355bc69e65",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/9d99b770e7b67b00bdef9005b928aad13e1d679b",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/caa1b913d90d5dc07073733326d2af0f0288f089",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/ff20d16b2e8230c034e21540043df47222dcc09b",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    }
  ]
}