Messages in this thread Patch in this message | | | Date | Sat, 2 May 2009 00:25:11 +0400 | From | Cyrill Gorcunov <> | Subject | Re: [PATCH -tip] x86: uv - prevent NULL dereference in uv_system_init |
| |
[Cyrill Gorcunov - Sat, May 02, 2009 at 12:09:37AM +0400] | [Ingo Molnar - Fri, May 01, 2009 at 10:03:31PM +0200] | | | | * Cyrill Gorcunov <gorcunov@openvz.org> wrote: | | | | > 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; | | | | hm, i think a BUG_ON() might be shorter and more appropriate here. | | We really shouldnt be running out of memory during system init. | | | | Ingo | | | | Yeah, indeed! I was thinking of __GPF_NOFAIL here as well with | message on top like pr_debug("UV: allocating memory\n") or something | like that. It would make it even cleaner I guess. Hmm? | | -- Cyrill
Here is an updated one.
-- Cyrill --- From: Cyrill Gorcunov <gorcunov@openvz.org> Subject: [PATCH -tip] x86: uv - prevent NULL dereference in uv_system_init
We may reach NULL dereference oops if kmalloc failed. Prevent it with explisit BUG_ON.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> --- arch/x86/kernel/apic/x2apic_uv_x.c | 3 +++ 1 file changed, 3 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,18 @@ void __init uv_system_init(void) bytes = sizeof(struct uv_blade_info) * uv_num_possible_blades(); uv_blade_info = kmalloc(bytes, GFP_KERNEL); + BUG_ON(!uv_blade_info); 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); + BUG_ON(!uv_node_to_blade); 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); + BUG_ON(!uv_cpu_to_blade); memset(uv_cpu_to_blade, 255, bytes); blade = 0;
| |