mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
arm64/pageattr: Propagate return value from __change_memory_common
The rodata=on security measure requires that any code path which does vmalloc -> set_memory_ro/set_memory_rox must protect the linear map alias too. Therefore, if such a call fails, we must abort set_memory_* and caller must take appropriate action; currently we are suppressing the error, and there is a real chance of such an error arising post commita166563e7e("arm64: mm: support large block mapping when rodata=full"). Therefore, propagate any error to the caller. Fixes:a166563e7e("arm64: mm: support large block mapping when rodata=full") Signed-off-by: Dev Jain <dev.jain@arm.com> Reviewed-by: Ryan Roberts <ryan.roberts@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
committed by
Catalin Marinas
parent
3a86608788
commit
e5efd56fa1
@@ -148,6 +148,7 @@ static int change_memory_common(unsigned long addr, int numpages,
|
||||
unsigned long size = PAGE_SIZE * numpages;
|
||||
unsigned long end = start + size;
|
||||
struct vm_struct *area;
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
if (!PAGE_ALIGNED(addr)) {
|
||||
@@ -185,8 +186,10 @@ static int change_memory_common(unsigned long addr, int numpages,
|
||||
if (rodata_full && (pgprot_val(set_mask) == PTE_RDONLY ||
|
||||
pgprot_val(clear_mask) == PTE_RDONLY)) {
|
||||
for (i = 0; i < area->nr_pages; i++) {
|
||||
__change_memory_common((u64)page_address(area->pages[i]),
|
||||
ret = __change_memory_common((u64)page_address(area->pages[i]),
|
||||
PAGE_SIZE, set_mask, clear_mask);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user