diff options
Diffstat (limited to 'debian/patches')
-rw-r--r-- | debian/patches/31_tls_ldt.patch | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/debian/patches/31_tls_ldt.patch b/debian/patches/31_tls_ldt.patch new file mode 100644 index 0000000..5cbc6d2 --- /dev/null +++ b/debian/patches/31_tls_ldt.patch @@ -0,0 +1,53 @@ +#DPATCHLEVEL=0 + +2005-09-18 Jeroen Dekkers <jeroen@dekkers.cx> + + * i386/i386/locore.S (trap_push_segs): Switch fs and gs to kernel + data segment too. + (syscall_entry_2): Likewise. + * i386/i386/user_ldt.c (i386_set_ldt): Always copy the master LDT + when there is no old user LDT. + + +Index: i386/i386/locore.S +=================================================================== +RCS file: /cvsroot/hurd/gnumach/i386/i386/locore.S,v +retrieving revision 1.6.2.1 +diff -u -p -r1.6.2.1 locore.S +--- i386/i386/locore.S 28 Nov 2004 17:29:35 -0000 1.6.2.1 ++++ i386/i386/locore.S 30 Aug 2005 10:34:02 -0000 +@@ -464,6 +464,8 @@ trap_push_segs: + mov %ss,%ax /* switch to kernel data segment */ + mov %ax,%ds /* (same as kernel stack segment) */ + mov %ax,%es ++ mov %ax,%fs ++ mov %ax,%gs + + trap_set_segs: + cld /* clear direction flag */ +@@ -982,6 +984,8 @@ syscall_entry_2: + mov %ss,%dx /* switch to kernel data segment */ + mov %dx,%ds + mov %dx,%es ++ mov %dx,%fs ++ mov %dx,%gs + + /* + * Shuffle eflags,eip,cs into proper places +Index: i386/i386/user_ldt.c +=================================================================== +RCS file: /cvsroot/hurd/gnumach/i386/i386/user_ldt.c,v +retrieving revision 1.2 +diff -u -p -r1.2 user_ldt.c +--- i386/i386/user_ldt.c 16 Sep 1999 02:17:48 -0000 1.2 ++++ i386/i386/user_ldt.c 30 Aug 2005 10:34:02 -0000 +@@ -225,7 +225,7 @@ i386_set_ldt(thread, first_selector, des + (char *)&new_ldt->ldt[0], + old_ldt->desc.limit_low + 1); + } +- else if (thread == current_thread()) { ++ else { + struct real_descriptor template = {0, 0, 0, ACC_P, 0, 0 ,0}; + + for (dp = &new_ldt->ldt[0], i = 0; i < first_desc; i++, dp++) { + |