[PATCH] x86_64 NUMA : Bug correction in populate_memnodemap()
From: Eric Dumazet
Date: Wed Dec 07 2005 - 10:35:16 EST
As reported by Keith Mannthey, there are problems in populate_memnodemap()
The bug was that the compute_hash_shift() was returning 31, with incorrect
initialization of memnodemap[]
To correct the bug, we must use (1UL << shift) instead of (1 << shift) to
avoid an integer overflow, and we must check that shift < 64 to avoid an
infinite loop.
Signed-off-by: Eric Dumazet <dada1@xxxxxxxxxxxxx>
--- linux-2.6.15-rc5/arch/x86_64/mm/numa.c 2005-12-04 06:10:42.000000000 +0100
+++ linux-2.6.15-rc5-ed/arch/x86_64/mm/numa.c 2005-12-07 16:45:15.000000000 +0100
@@ -53,6 +53,8 @@
int res = -1;
unsigned long addr, end;
+ if (shift >= 64)
+ return -1;
memset(memnodemap, 0xff, sizeof(memnodemap));
for (i = 0; i < numnodes; i++) {
addr = nodes[i].start;
@@ -65,7 +67,7 @@
if (memnodemap[addr >> shift] != 0xff)
return -1;
memnodemap[addr >> shift] = i;
- addr += (1 << shift);
+ addr += (1UL << shift);
} while (addr < end);
res = 1;
}