2005-09-22 07:37:48

by Zachary Amsden

[permalink] [raw]
Subject: [PATCH 1/3] Bogus tls from gdt

The per-CPU initialization code is copying in bogus data into
thread->tls_array. Note that it copies &per_cpu(cpu_gdt_table, cpu),
not &per_cpu(cpu_gdt_table, cpu)[GDT_ENTRY_TLS_MIN). That is totally
broken and unnecessary. Make the initialization explicitly NULL.

Signed-off-by: Zachary Amsden <[email protected]>

Index: linux-2.6.14-rc1/arch/i386/kernel/cpu/common.c
===================================================================
--- linux-2.6.14-rc1.orig/arch/i386/kernel/cpu/common.c 2005-09-20 14:49:10.000000000 -0700
+++ linux-2.6.14-rc1/arch/i386/kernel/cpu/common.c 2005-09-20 14:49:41.000000000 -0700
@@ -607,12 +607,6 @@ void __devinit cpu_init(void)
cpu_gdt_descr[cpu].address =
(unsigned long)&per_cpu(cpu_gdt_table, cpu);

- /*
- * Set up the per-thread TLS descriptor cache:
- */
- memcpy(thread->tls_array, &per_cpu(cpu_gdt_table, cpu),
- GDT_ENTRY_TLS_ENTRIES * 8);
-
load_gdt(&cpu_gdt_descr[cpu]);
load_idt(&idt_descr);


2005-09-22 08:57:06

by Ingo Molnar

[permalink] [raw]
Subject: Re: [PATCH 1/3] Bogus tls from gdt


* Zachary Amsden <[email protected]> wrote:

> The per-CPU initialization code is copying in bogus data into
> thread->tls_array. Note that it copies &per_cpu(cpu_gdt_table, cpu),
> not &per_cpu(cpu_gdt_table, cpu)[GDT_ENTRY_TLS_MIN). That is totally
> broken and unnecessary. Make the initialization explicitly NULL.
>
> Signed-off-by: Zachary Amsden <[email protected]>

Acked-by: Ingo Molnar <[email protected]>

Ingo