All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 1/2] x86/pti: check the return value of pti_user_pagetable_walk_p4d
@ 2018-07-20  0:06 Jiang Biao
  2018-07-20  0:06 ` [PATCH v4 2/2] x86/pti: check the return value of pti_user_pagetable_walk_pmd Jiang Biao
  2018-07-20  5:09 ` [tip:x86/pti] x86/pti: Check the return value of pti_user_pagetable_walk_p4d() tip-bot for Jiang Biao
  0 siblings, 2 replies; 4+ messages in thread
From: Jiang Biao @ 2018-07-20  0:06 UTC (permalink / raw)
  To: tglx, mingo
  Cc: dave.hansen, luto, hpa, x86, albcamus, linux-kernel,
	zhong.weidong, jiang.biao2

pti_user_pagetable_walk_p4d() may return NULL, we should check the
return value to avoid NULL pointer dereference. And add warning
for fail allocation where NULL returned.

Signed-off-by: Jiang Biao <jiang.biao2@zte.com.cn>
---
 arch/x86/mm/pti.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/arch/x86/mm/pti.c b/arch/x86/mm/pti.c
index 4d418e7..8679c64 100644
--- a/arch/x86/mm/pti.c
+++ b/arch/x86/mm/pti.c
@@ -176,7 +176,7 @@ static p4d_t *pti_user_pagetable_walk_p4d(unsigned long address)

 	if (pgd_none(*pgd)) {
 		unsigned long new_p4d_page = __get_free_page(gfp);
-		if (!new_p4d_page)
+		if (WARN_ON_ONCE(!new_p4d_page))
 			return NULL;

 		set_pgd(pgd, __pgd(_KERNPG_TABLE | __pa(new_p4d_page)));
@@ -195,9 +195,13 @@ static p4d_t *pti_user_pagetable_walk_p4d(unsigned long address)
 static pmd_t *pti_user_pagetable_walk_pmd(unsigned long address)
 {
 	gfp_t gfp = (GFP_KERNEL | __GFP_NOTRACK | __GFP_ZERO);
-	p4d_t *p4d = pti_user_pagetable_walk_p4d(address);
+	p4d_t *p4d;
 	pud_t *pud;

+	p4d = pti_user_pagetable_walk_p4d(address);
+	if (!p4d)
+		return NULL;
+
 	BUILD_BUG_ON(p4d_large(*p4d) != 0);
 	if (p4d_none(*p4d)) {
 		unsigned long new_pud_page = __get_free_page(gfp);
@@ -354,6 +358,9 @@ static void __init pti_clone_p4d(unsigned long addr)
 	pgd_t *kernel_pgd;

 	user_p4d = pti_user_pagetable_walk_p4d(addr);
+	if (!user_p4d)
+		return;
+
 	kernel_pgd = pgd_offset_k(addr);
 	kernel_p4d = p4d_offset(kernel_pgd, addr);
 	*user_p4d = *kernel_p4d;
--
2.7.4


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-07-20  5:10 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-20  0:06 [PATCH v4 1/2] x86/pti: check the return value of pti_user_pagetable_walk_p4d Jiang Biao
2018-07-20  0:06 ` [PATCH v4 2/2] x86/pti: check the return value of pti_user_pagetable_walk_pmd Jiang Biao
2018-07-20  5:10   ` [tip:x86/pti] x86/pti: Check the return value of pti_user_pagetable_walk_pmd() tip-bot for Jiang Biao
2018-07-20  5:09 ` [tip:x86/pti] x86/pti: Check the return value of pti_user_pagetable_walk_p4d() tip-bot for Jiang Biao

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.