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

!10189 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/LF2TQKNGNXIPQ7MWBH3RK3GGGSYHZO64/ 
*** 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/10189

 

Reviewed-by: default avatarYang Yingliang <yangyingliang@huawei.com>
Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
parents c9f0f549 329c17b7
Loading
Loading
Loading
Loading
+22 −6
Original line number Diff line number Diff line
@@ -184,15 +184,31 @@ int set_direct_map_default_noflush(struct page *page)
	return ret;
}

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)
{
	unsigned long start = (unsigned long)page_address(page);
	unsigned long size = PAGE_SIZE * numpages;

	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));
	apply_to_existing_page_range(&init_mm, start, size, debug_pagealloc_set_page, &enable);

	flush_tlb_kernel_range(start, start + size);
}