diff options
author | Jonathan Corbet <corbet@lwn.net> | 2024-09-05 14:01:38 -0600 |
---|---|---|
committer | Jonathan Corbet <corbet@lwn.net> | 2024-09-05 14:01:38 -0600 |
commit | d224338aa105bf3c4c4aa8b2ccdbd675c71ffbfe (patch) | |
tree | b7b6b8c98595c89f7ad5307120cb3156708991bc /security/selinux/hooks.c | |
parent | eb5ed2fae19745fcb7dd0dcfbfbcd8b2847bc5c1 (diff) | |
parent | 431c1646e1f86b949fa3685efc50b660a364c2b6 (diff) | |
download | lwn-d224338aa105bf3c4c4aa8b2ccdbd675c71ffbfe.tar.gz lwn-d224338aa105bf3c4c4aa8b2ccdbd675c71ffbfe.zip |
Merge tag 'v6.11-rc6' into docs-mw
This is done primarily to get a docs build fix merged via another tree so
that "make htmldocs" stops failing.
Diffstat (limited to 'security/selinux/hooks.c')
-rw-r--r-- | security/selinux/hooks.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 55c78c318ccd..400eca4ad0fb 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -3852,7 +3852,17 @@ static int selinux_file_mprotect(struct vm_area_struct *vma, if (default_noexec && (prot & PROT_EXEC) && !(vma->vm_flags & VM_EXEC)) { int rc = 0; - if (vma_is_initial_heap(vma)) { + /* + * We don't use the vma_is_initial_heap() helper as it has + * a history of problems and is currently broken on systems + * where there is no heap, e.g. brk == start_brk. Before + * replacing the conditional below with vma_is_initial_heap(), + * or something similar, please ensure that the logic is the + * same as what we have below or you have tested every possible + * corner case you can think to test. + */ + if (vma->vm_start >= vma->vm_mm->start_brk && + vma->vm_end <= vma->vm_mm->brk) { rc = avc_has_perm(sid, sid, SECCLASS_PROCESS, PROCESS__EXECHEAP, NULL); } else if (!vma->vm_file && (vma_is_initial_stack(vma) || @@ -6650,8 +6660,8 @@ static int selinux_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen */ static int selinux_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen) { - return __vfs_setxattr_noperm(&nop_mnt_idmap, dentry, XATTR_NAME_SELINUX, - ctx, ctxlen, 0); + return __vfs_setxattr_locked(&nop_mnt_idmap, dentry, XATTR_NAME_SELINUX, + ctx, ctxlen, 0, NULL); } static int selinux_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen) |