diff options
| author | Aaron Durbin <adurbin@google.com> | 2007-05-16 22:11:06 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-17 05:23:04 -0700 | 
| commit | f363d16fbb9374c0bd7f2757d412c287169094c9 (patch) | |
| tree | fc706493c5cca046934de190056756f7ce02422f /drivers/acpi/numa.c | |
| parent | 0aa817f078b655d0ae36669169d73a5c8a388016 (diff) | |
acpi: fix potential call to a freed memory section.
Strip __cpuinit[data] from Node <-> PXM routines and supporting data
structures.  Also make pxm_to_node_map and node_to_pxm_map local to the
numa acpi module.
This fixes a bug triggered by the following conditions:
- boot on a machine with a SLIT table defined
- kernel is configured w/ CONFIG_HOTPLUG_CPU=n
- cat /sys/devices/system/node/node*/distance
This will cause an oops by calling into a freed memory section.
In particular, on x86_64, __node_distance calls node_to_pxm().
Signed-off-by: Aaron Durbin <adurbin@google.com>
Cc: Len Brown <lenb@kernel.org>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/acpi/numa.c')
| -rw-r--r-- | drivers/acpi/numa.c | 8 | 
1 files changed, 4 insertions, 4 deletions
| diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c index 8fcd6a15517f..a2efae8a4c4e 100644 --- a/drivers/acpi/numa.c +++ b/drivers/acpi/numa.c @@ -40,19 +40,19 @@ static nodemask_t nodes_found_map = NODE_MASK_NONE;  #define NID_INVAL	-1  /* maps to convert between proximity domain and logical node ID */ -int __cpuinitdata pxm_to_node_map[MAX_PXM_DOMAINS] +static int pxm_to_node_map[MAX_PXM_DOMAINS]  				= { [0 ... MAX_PXM_DOMAINS - 1] = NID_INVAL }; -int __cpuinitdata node_to_pxm_map[MAX_NUMNODES] +static int node_to_pxm_map[MAX_NUMNODES]  				= { [0 ... MAX_NUMNODES - 1] = PXM_INVAL }; -int __cpuinit pxm_to_node(int pxm) +int pxm_to_node(int pxm)  {  	if (pxm < 0)  		return NID_INVAL;  	return pxm_to_node_map[pxm];  } -int __cpuinit node_to_pxm(int node) +int node_to_pxm(int node)  {  	if (node < 0)  		return PXM_INVAL; | 
