Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit de04d297 authored by Jann Horn's avatar Jann Horn Committed by Greg Kroah-Hartman
Browse files

mm: enforce min addr even if capable() in expand_downwards()



commit 0a1d52994d440e21def1c2174932410b4f2a98a1 upstream.

security_mmap_addr() does a capability check with current_cred(), but
we can reach this code from contexts like a VFS write handler where
current_cred() must not be used.

This can be abused on systems without SMAP to make NULL pointer
dereferences exploitable again.

Fixes: 8869477a ("security: protect from stack expansion into low vm addresses")
Cc: stable@kernel.org
Signed-off-by: default avatarJann Horn <jannh@google.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent ff86bb4d
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -2391,12 +2391,11 @@ int expand_downwards(struct vm_area_struct *vma,
{
	struct mm_struct *mm = vma->vm_mm;
	struct vm_area_struct *prev;
	int error;
	int error = 0;

	address &= PAGE_MASK;
	error = security_mmap_addr(address);
	if (error)
		return error;
	if (address < mmap_min_addr)
		return -EPERM;

	/* Enforce stack_guard_gap */
	prev = vma->vm_prev;