selinux: preserve user SID across nested backing files
What fixes it
- 6aaeec59aadcd1eafc18b049f1b759fb6b9d9569LinuxCVE List
- 9d99b770e7b67b00bdef9005b928aad13e1d679bLinuxCVE List
- 8c0c602202b9a4909b00bc3354e3c0355bc69e65LinuxCVE List
- 6.6.158LinuxCVE List
- 6.12.112LinuxCVE List
- 6.18.54LinuxCVE List
Show all 7 fixed versions
- 7.1LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
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.
Text from CVE List
Affected versions 17
- Linuxaffected: bc6c380c1159de52a252ed11f19a42c47f60a735 before caa1b913d90d5dc07073733326d2af0f0288f089CVE List
- Linuxaffected: 8bacd09f12c27710228562e4d13163e58c5f4a45 before 6aaeec59aadcd1eafc18b049f1b759fb6b9d9569CVE List
- Linuxaffected: d844702198395d3f80222777030f69db6be6b709 before 9d99b770e7b67b00bdef9005b928aad13e1d679bCVE List
- Linuxaffected: 82544d36b1729153c8aeb179e84750f0c085d3b1 before ff20d16b2e8230c034e21540043df47222dcc09bCVE List
- Linuxaffected: 82544d36b1729153c8aeb179e84750f0c085d3b1 before 8c0c602202b9a4909b00bc3354e3c0355bc69e65CVE List
- Linuxaffected: cd0e707a927a70cdfd8bc5a512a9719a87f5ed51CVE List
- Linuxaffected: 6.6.144 before 6.6.158CVE List
- Linuxaffected: 6.12.95 before 6.12.112CVE List
- Linuxaffected: 6.18.38 before 6.18.54CVE List
- Linuxaffected: 7.0.4 before 7.1CVE List
- Linuxaffected: 7.1CVE List
- Linuxunaffected: all versions before 7.1CVE List
- Linuxunaffected: 6.6.158 through 6.6.*CVE List
- Linuxunaffected: 6.12.112 through 6.12.*CVE List
- Linuxunaffected: 6.18.54 through 6.18.*CVE List
- Linuxunaffected: 7.2.8 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 5
- git.kernel.org/stable/c/caa1b913d90d5dc07073733326d2af0f0288f089Referencevia CVE List
- git.kernel.org/stable/c/6aaeec59aadcd1eafc18b049f1b759fb6b9d9569Referencevia CVE List
- git.kernel.org/stable/c/9d99b770e7b67b00bdef9005b928aad13e1d679bReferencevia CVE List
- git.kernel.org/stable/c/ff20d16b2e8230c034e21540043df47222dcc09bReferencevia CVE List
- git.kernel.org/stable/c/8c0c602202b9a4909b00bc3354e3c0355bc69e65Referencevia CVE List