[PATCH] mm/vmalloc: Add check for KMEM_CACHE

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



As KMEM_CACHE may return NULL pointer, it should
be better to check the return value in order to
avoid NULL pointer dereference in kmem_cache_zalloc.

Fixes: 68ad4a330433 ("mm/vmalloc.c: keep track of free blocks for vmap allocation")
Signed-off-by: Jiasheng Jiang <jiasheng@xxxxxxxxxxx>
---
 mm/vmalloc.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index ccaa461998f3..df3e59f614cc 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -2426,15 +2426,17 @@ void __init vmalloc_init(void)
 	}
 
 	/* Import existing vmlist entries. */
-	for (tmp = vmlist; tmp; tmp = tmp->next) {
-		va = kmem_cache_zalloc(vmap_area_cachep, GFP_NOWAIT);
-		if (WARN_ON_ONCE(!va))
-			continue;
+	if (!WARN_ON_ONCE(!vmap_area_cachep)) {
+		for (tmp = vmlist; tmp; tmp = tmp->next) {
+			va = kmem_cache_zalloc(vmap_area_cachep, GFP_NOWAIT);
+			if (WARN_ON_ONCE(!va))
+				continue;
 
-		va->va_start = (unsigned long)tmp->addr;
-		va->va_end = va->va_start + tmp->size;
-		va->vm = tmp;
-		insert_vmap_area(va, &vmap_area_root, &vmap_area_list);
+			va->va_start = (unsigned long)tmp->addr;
+			va->va_end = va->va_start + tmp->size;
+			va->vm = tmp;
+			insert_vmap_area(va, &vmap_area_root, &vmap_area_list);
+		}
 	}
 
 	/*
-- 
2.25.1





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux