]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
selinux: always check the file label in selinux_kernel_read_file()
authorPaul Moore <paul@paul-moore.com>
Fri, 7 Feb 2025 03:30:20 +0000 (22:30 -0500)
committerPaul Moore <paul@paul-moore.com>
Fri, 7 Feb 2025 20:30:54 +0000 (15:30 -0500)
Commit 2039bda1fa8d ("LSM: Add "contents" flag to kernel_read_file hook")
added a new flag to the security_kernel_read_file() LSM hook, "contents",
which was set if a file was being read in its entirety or if it was the
first chunk read in a multi-step process.  The SELinux LSM callback was
updated to only check against the file label if this "contents" flag was
set, meaning that in multi-step reads the file label was not considered
in the access control decision after the initial chunk.

Thankfully the only in-tree user that performs a multi-step read is the
"bcm-vk" driver and it is loading firmware, not a kernel module, so there
are no security regressions to worry about.  However, we still want to
ensure that the SELinux code does the right thing, and *always* checks
the file label, especially as there is a chance the file could change
between chunk reads.

Fixes: 2039bda1fa8d ("LSM: Add "contents" flag to kernel_read_file hook")
Signed-off-by: Paul Moore <paul@paul-moore.com>
security/selinux/hooks.c

index 7b867dfec88baaf90dd10a1b9f6c4ce0058ad97c..a80e3f01153fb27af5a254e7081c0ce1d66379fc 100644 (file)
@@ -4134,7 +4134,7 @@ static int selinux_kernel_read_file(struct file *file,
 
        switch (id) {
        case READING_MODULE:
-               rc = selinux_kernel_module_from_file(contents ? file : NULL);
+               rc = selinux_kernel_module_from_file(file);
                break;
        default:
                break;