mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-28 01:21:58 +00:00
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security
Pull security subsystem updates from James Morris: "Highlights: - A new LSM, "LoadPin", from Kees Cook is added, which allows forcing of modules and firmware to be loaded from a specific device (this is from ChromeOS, where the device as a whole is verified cryptographically via dm-verity). This is disabled by default but can be configured to be enabled by default (don't do this if you don't know what you're doing). - Keys: allow authentication data to be stored in an asymmetric key. Lots of general fixes and updates. - SELinux: add restrictions for loading of kernel modules via finit_module(). Distinguish non-init user namespace capability checks. Apply execstack check on thread stacks" * 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security: (48 commits) LSM: LoadPin: provide enablement CONFIG Yama: use atomic allocations when reporting seccomp: Fix comment typo ima: add support for creating files using the mknodat syscall ima: fix ima_inode_post_setattr vfs: forbid write access when reading a file into memory fs: fix over-zealous use of "const" selinux: apply execstack check on thread stacks selinux: distinguish non-init user namespace capability checks LSM: LoadPin for kernel file loading restrictions fs: define a string representation of the kernel_read_file_id enumeration Yama: consolidate error reporting string_helpers: add kstrdup_quotable_file string_helpers: add kstrdup_quotable_cmdline string_helpers: add kstrdup_quotable selinux: check ss_initialized before revalidating an inode label selinux: delay inode label lookup as long as possible selinux: don't revalidate an inode's label when explicitly setting it selinux: Change bool variable name to index. KEYS: Add KEYCTL_DH_COMPUTE command ...
This commit is contained in:
commit
f4f27d0028
82 changed files with 1915 additions and 807 deletions
29
fs/exec.c
29
fs/exec.c
|
@ -850,15 +850,25 @@ int kernel_read_file(struct file *file, void **buf, loff_t *size,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = deny_write_access(file);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
i_size = i_size_read(file_inode(file));
|
||||
if (max_size > 0 && i_size > max_size)
|
||||
return -EFBIG;
|
||||
if (i_size <= 0)
|
||||
return -EINVAL;
|
||||
if (max_size > 0 && i_size > max_size) {
|
||||
ret = -EFBIG;
|
||||
goto out;
|
||||
}
|
||||
if (i_size <= 0) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
*buf = vmalloc(i_size);
|
||||
if (!*buf)
|
||||
return -ENOMEM;
|
||||
if (!*buf) {
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
pos = 0;
|
||||
while (pos < i_size) {
|
||||
|
@ -876,18 +886,21 @@ int kernel_read_file(struct file *file, void **buf, loff_t *size,
|
|||
|
||||
if (pos != i_size) {
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
ret = security_kernel_post_read_file(file, *buf, i_size, id);
|
||||
if (!ret)
|
||||
*size = pos;
|
||||
|
||||
out:
|
||||
out_free:
|
||||
if (ret < 0) {
|
||||
vfree(*buf);
|
||||
*buf = NULL;
|
||||
}
|
||||
|
||||
out:
|
||||
allow_write_access(file);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kernel_read_file);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue