[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20090501195638.GC4633@lenovo>
Date: Fri, 1 May 2009 23:56:38 +0400
From: Cyrill Gorcunov <gorcunov@...nvz.org>
To: Ingo Molnar <mingo@...e.hu>
Cc: "H. Peter Anvin" <hpa@...or.com>,
Thomas Gleixner <tglx@...utronix.de>,
LKML <linux-kernel@...r.kernel.org>,
Jack Steiner <steiner@....com>
Subject: [PATCH -tip] x86: uv - prevent NULL dereference in uv_system_init
We may reach NULL dereference oops if kmalloc failed.
Lets do panic better with sensible message.
Signed-off-by: Cyrill Gorcunov <gorcunov@...nvz.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");
}
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists