[PATCH -tip] x86: uv - prevent NULL dereference in uv_system_init

Cyrill Gorcunov
2009-05-01T19:57:23Z

We may reach NULL dereference oops if kmalloc failed.
Lets do panic better with sensible message.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
---

Actually there is a dubious place as well at early_get_nodeid.
Is there a guarantee that we _never_ fail in early_ioremap?

arch/x86/kernel/apic/x2apic_uv_x.c | 9 +++++++++
1 file changed, 9 insertions(+)

Index: linux-2.6.git/arch/x86/kernel/apic/x2apic_uv_x.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/kernel/apic/x2apic_uv_x.c
+++ linux-2.6.git/arch/x86/kernel/apic/x2apic_uv_x.c
@@ -584,15 +584,21 @@ void __init uv_system_init(void)

bytes = sizeof(struct uv_blade_info) * uv_num_possible_blades();
uv_blade_info = kmalloc(bytes, GFP_KERNEL);
+ if (!uv_blade_info)
+ goto err_nomem;

get_lowmem_redirect(&lowmem_redir_base, &lowmem_redir_size);

bytes = sizeof(uv_node_to_blade[0]) * num_possible_nodes();
uv_node_to_blade = kmalloc(bytes, GFP_KERNEL);
+ if (!uv_node_to_blade)
+ goto err_nomem;
memset(uv_node_to_blade, 255, bytes);

bytes = sizeof(uv_cpu_to_blade[0]) * num_possible_cpus();
uv_cpu_to_blade = kmalloc(bytes, GFP_KERNEL);
+ if (!uv_cpu_to_blade)
+ goto err_nomem;
memset(uv_cpu_to_blade, 255, bytes);

blade = 0;
@@ -667,4 +673,7 @@ void __init uv_system_init(void)
uv_cpu_init();
uv_scir_register_cpu_notifier();
proc_mkdir("sgi_uv", NULL);
+
+err_nomem:
+ panic("UV: Out of memory\n");
}