mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
mm: add arch hook to validate mmap() prot flags
Add a hook to permit architectures to perform validation on the prot flags passed to mmap(), like arch_validate_prot() does for mprotect(). This will be used by arm64 to reject PROT_WRITE+PROT_EXEC mappings on configurations that run with WXN enabled. Reviewed-by: Kees Cook <keescook@chromium.org> Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Link: https://lore.kernel.org/r/20240214122845.2033971-87-ardb+git@google.com Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
committed by
Catalin Marinas
parent
5d10165422
commit
cb1a393c40
@@ -124,6 +124,21 @@ static inline bool arch_validate_flags(unsigned long flags)
|
||||
#define arch_validate_flags arch_validate_flags
|
||||
#endif
|
||||
|
||||
#ifndef arch_validate_mmap_prot
|
||||
/*
|
||||
* This is called from mmap(), which ignores unknown prot bits so the default
|
||||
* is to accept anything.
|
||||
*
|
||||
* Returns true if the prot flags are valid
|
||||
*/
|
||||
static inline bool arch_validate_mmap_prot(unsigned long prot,
|
||||
unsigned long addr)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
#define arch_validate_mmap_prot arch_validate_mmap_prot
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Optimisation macro. It is equivalent to:
|
||||
* (x & bit1) ? bit2 : 0
|
||||
|
||||
@@ -1229,6 +1229,9 @@ unsigned long do_mmap(struct file *file, unsigned long addr,
|
||||
if (!(file && path_noexec(&file->f_path)))
|
||||
prot |= PROT_EXEC;
|
||||
|
||||
if (!arch_validate_mmap_prot(prot, addr))
|
||||
return -EACCES;
|
||||
|
||||
/* force arch specific MAP_FIXED handling in get_unmapped_area */
|
||||
if (flags & MAP_FIXED_NOREPLACE)
|
||||
flags |= MAP_FIXED;
|
||||
|
||||
Reference in New Issue
Block a user