diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index 735b501ac412368161d38f329526d7703ad610a3..8c20670e246dc8dfb4768caa551d2f9120a107eb 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -2894,7 +2894,10 @@ long vread(char *buf, char *addr, unsigned long count)
 		count = -(unsigned long) addr;
 
 	spin_lock(&vmap_area_lock);
-	list_for_each_entry(va, &vmap_area_list, list) {
+	va = __find_vmap_area((unsigned long)addr);
+	if (!va)
+		goto finished;
+	list_for_each_entry_from(va, &vmap_area_list, list) {
 		if (!count)
 			break;