Commit 92d585ef authored by Xishi Qiu's avatar Xishi Qiu Committed by Greg Kroah-Hartman

numa: fix NULL pointer access and memory leak in unregister_one_node()

When doing socket hot remove, "node_devices[nid]" is set to NULL;
acpi_processor_remove()
	try_offline_node()
		unregister_one_node()

Then hot add a socket, but do not echo 1 > /sys/devices/system/cpu/cpuXX/online,
so register_one_node() will not be called, and "node_devices[nid]"
is still NULL.

If doing socket hot remove again, NULL pointer access will be happen.
unregister_one_node()
	unregister_node()

Another, we should free the memory used by "node_devices[nid]" in
unregister_one_node().
Signed-off-by: default avatarXishi Qiu <qiuxishi@huawei.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent aa0689b3
...@@ -599,7 +599,11 @@ int register_one_node(int nid) ...@@ -599,7 +599,11 @@ int register_one_node(int nid)
void unregister_one_node(int nid) void unregister_one_node(int nid)
{ {
if (!node_devices[nid])
return;
unregister_node(node_devices[nid]); unregister_node(node_devices[nid]);
kfree(node_devices[nid]);
node_devices[nid] = NULL; node_devices[nid] = NULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment