2002-08-07 15:51:49

by Luca Barbieri

[permalink] [raw]
Subject: [PATCH] [2.5 i386] Fix AP GDT descs to have limit = size - 1

This is the right thing (also done by head.s).

diff --exclude-from=/home/ldb/src/linux-exclude -urNd a/arch/i386/kernel/cpu/common.c b/arch/i386/kernel/cpu/common.c
--- a/arch/i386/kernel/cpu/common.c 2002-08-06 10:26:11.000000000 +0200
+++ b/arch/i386/kernel/cpu/common.c 2002-08-07 17:47:05.000000000 +0200
@@ -451,7 +451,7 @@
*/
if (cpu) {
memcpy(cpu_gdt_table[cpu], cpu_gdt_table[0], GDT_SIZE);
- cpu_gdt_descr[cpu].size = GDT_SIZE;
+ cpu_gdt_descr[cpu].size = GDT_SIZE - 1;
cpu_gdt_descr[cpu].address = (unsigned long)cpu_gdt_table[cpu];
}


Attachments:
signature.asc (189.00 B)
This is a digitally signed message part

2002-08-07 16:51:44

by Ingo Molnar

[permalink] [raw]
Subject: Re: [PATCH] [2.5 i386] Fix AP GDT descs to have limit = size - 1


On 7 Aug 2002, Luca Barbieri wrote:

> memcpy(cpu_gdt_table[cpu], cpu_gdt_table[0], GDT_SIZE);
> - cpu_gdt_descr[cpu].size = GDT_SIZE;
> + cpu_gdt_descr[cpu].size = GDT_SIZE - 1;
> cpu_gdt_descr[cpu].address = (unsigned long)cpu_gdt_table[cpu];

indeed, good eyes!

i'm wondering whether this could have caused any problems - since the
limit was not a proper multiple of 8 minus 1, no selector value could have
caused a descriptor to be loaded from the invalid byte.

Ingo