Unverified Commit 55840856 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!10160 fix CVE-2024-40915

Merge Pull Request from: @ci-robot 
 
PR sync from: Lin Yujun <linyujun809@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/MJNZYMZFH42CTRECJW4CAZZO7FGQ6N5L/ 
*** BLURB HERE ***

Nam Cao (1):
  riscv: rewrite __kernel_map_pages() to fix sleeping in invalid context


-- 
2.34.1
 
https://gitee.com/src-openeuler/kernel/issues/IACS5F 
 
Link:https://gitee.com/openeuler/kernel/pulls/10160

 

Reviewed-by: default avatarZhang Peng <zhangpeng362@huawei.com>
Signed-off-by: default avatarZhang Peng <zhangpeng362@huawei.com>
parents e5705bb9 ddcc7d26
Loading
Loading
Loading
Loading
+22 −6
Original line number Diff line number Diff line
@@ -387,17 +387,33 @@ int set_direct_map_default_noflush(struct page *page)
}

#ifdef CONFIG_DEBUG_PAGEALLOC
static int debug_pagealloc_set_page(pte_t *pte, unsigned long addr, void *data)
{
	int enable = *(int *)data;

	unsigned long val = pte_val(ptep_get(pte));

	if (enable)
		val |= _PAGE_PRESENT;
	else
		val &= ~_PAGE_PRESENT;

	set_pte(pte, __pte(val));

	return 0;
}

void __kernel_map_pages(struct page *page, int numpages, int enable)
{
	if (!debug_pagealloc_enabled())
		return;

	if (enable)
		__set_memory((unsigned long)page_address(page), numpages,
			     __pgprot(_PAGE_PRESENT), __pgprot(0));
	else
		__set_memory((unsigned long)page_address(page), numpages,
			     __pgprot(0), __pgprot(_PAGE_PRESENT));
	unsigned long start = (unsigned long)page_address(page);
	unsigned long size = PAGE_SIZE * numpages;

	apply_to_existing_page_range(&init_mm, start, size, debug_pagealloc_set_page, &enable);

	flush_tlb_kernel_range(start, start + size);
}
#endif