Skip to contentSkip to conversation

vmalloc fix

PATCH New Anton Blanchard 1 participant 1 message Jan 21, 2004

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 vmalloc fix

Hi,

Paul wrote a patch to use some of the rmap infrastructure to flush TLB entries on ppc64. When testing it we found a problem in vmalloc where it sets up the pte -> address mapping incorrectly. We clear the top bits of the address but then forget to pass in the full address to pte_alloc_kernel. The end result is the address in page->index is truncated.

I fixed it in a similar way to how zeromap_pmd_range etc does it. Im guessing no one uses the rmap hooks on vmalloc pages yet, so havent seen this problem.

Anton

===== mm/vmalloc.c 1.29 vs edited =====

mm/vmalloc.c +3 -2
@@ -114,15 +114,16 @@
 			       unsigned long size, pgprot_t prot,
 			       struct page ***pages)
 {
-	unsigned long end;
+	unsigned long base, end;
 
+	base = address & PGDIR_MASK;
 	address &= ~PGDIR_MASK;
 	end = address + size;
 	if (end > PGDIR_SIZE)
 		end = PGDIR_SIZE;
 
 	do {
-		pte_t * pte = pte_alloc_kernel(&init_mm, pmd, address);
+		pte_t * pte = pte_alloc_kernel(&init_mm, pmd, base + address);
 		if (!pte)
 			return -ENOMEM;
 		if (map_area_pte(pte, address, end - address, prot, pages))