Module Name: src Committed By: bouyer Date: Tue Feb 16 21:24:22 UTC 2010
Modified Files: src/sys/arch/i386/i386 [netbsd-5-0]: ibcs2_machdep.c svr4_machdep.c Log Message: Pull up following revision(s) (requested by drochner in ticket #1307): sys/arch/i386/i386/svr4_machdep.c: revision 1.96 sys/arch/i386/i386/ibcs2_machdep.c: revision 1.40 fix confused CS selector, fixes the panic reported by Mark Davis per PR port-i386/42787 (the panic happens due to a GPF when a privileged descriptor is tried to be loaded with the UPL bit set) The original bug is very old (pre-2.0, i386/svr4_machdep.c rev. 1.69), but it was relatively harmless until the order of GDT entries was shuffled (pre-5.0, i386/segments.h rev. 1.42). Before, it caused a userlevel data selector to be used for CS which broke the emulation (likely the reason of PR port-i386/32424). The shuffle made that a privileged selector was used, causing the GPF. (recent -current doesn't panic on that GPF which seems to be a side effect of another change) To generate a diff of this commit: cvs rdiff -u -r1.36 -r1.36.16.1 src/sys/arch/i386/i386/ibcs2_machdep.c cvs rdiff -u -r1.92 -r1.92.6.1 src/sys/arch/i386/i386/svr4_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/i386/i386/ibcs2_machdep.c diff -u src/sys/arch/i386/i386/ibcs2_machdep.c:1.36 src/sys/arch/i386/i386/ibcs2_machdep.c:1.36.16.1 --- src/sys/arch/i386/i386/ibcs2_machdep.c:1.36 Mon Apr 28 20:23:24 2008 +++ src/sys/arch/i386/i386/ibcs2_machdep.c Tue Feb 16 21:24:22 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: ibcs2_machdep.c,v 1.36 2008/04/28 20:23:24 martin Exp $ */ +/* $NetBSD: ibcs2_machdep.c,v 1.36.16.1 2010/02/16 21:24:22 bouyer Exp $ */ /*- * Copyright (c) 1997, 2000 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ibcs2_machdep.c,v 1.36 2008/04/28 20:23:24 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ibcs2_machdep.c,v 1.36.16.1 2010/02/16 21:24:22 bouyer Exp $"); #if defined(_KERNEL_OPT) #include "opt_vm86.h" @@ -78,7 +78,7 @@ pcb->pcb_savefpu.sv_87.sv_env.en_cw = __iBCS2_NPXCW__; tf = l->l_md.md_regs; tf->tf_eax = 0x2000000; /* XXX base of heap */ - tf->tf_cs = GSEL(LUCODEBIG_SEL, SEL_UPL); + tf->tf_cs = GSEL(GUCODEBIG_SEL, SEL_UPL); } /* Index: src/sys/arch/i386/i386/svr4_machdep.c diff -u src/sys/arch/i386/i386/svr4_machdep.c:1.92 src/sys/arch/i386/i386/svr4_machdep.c:1.92.6.1 --- src/sys/arch/i386/i386/svr4_machdep.c:1.92 Fri Sep 19 19:15:58 2008 +++ src/sys/arch/i386/i386/svr4_machdep.c Tue Feb 16 21:24:22 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: svr4_machdep.c,v 1.92 2008/09/19 19:15:58 christos Exp $ */ +/* $NetBSD: svr4_machdep.c,v 1.92.6.1 2010/02/16 21:24:22 bouyer Exp $ */ /*- * Copyright (c) 1994, 2000 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: svr4_machdep.c,v 1.92 2008/09/19 19:15:58 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: svr4_machdep.c,v 1.92.6.1 2010/02/16 21:24:22 bouyer Exp $"); #if defined(_KERNEL_OPT) #include "opt_vm86.h" @@ -119,7 +119,7 @@ pcb->pcb_savefpu.sv_xmm.sv_env.en_cw = __SVR4_NPXCW__; else pcb->pcb_savefpu.sv_87.sv_env.en_cw = __SVR4_NPXCW__; - tf->tf_cs = GSEL(LUCODEBIG_SEL, SEL_UPL); + tf->tf_cs = GSEL(GUCODEBIG_SEL, SEL_UPL); } void *