Date: Fri, 1 Aug 2003 15:17:12 -0700 (PDT) From: Julian Elischer <julian@elischer.org> To: deischen@freebsd.org Cc: current@freebsd.org Subject: Re: NVidia glx stuff dies in sysarch(I386_SET_LDT, ...) Message-ID: <Pine.BSF.4.21.0308011511170.46065-100000@InterJet.elischer.org> In-Reply-To: <Pine.GSO.4.10.10308011800170.6295-100000@pcnet5.pcnet.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 1 Aug 2003, Daniel Eischen wrote: > On Fri, 1 Aug 2003, Thorsten Greiner wrote: > > > * Thorsten Greiner <thorsten.greiner@web.de> [2003-08-01 23:47]: > > > I will test wether the problem still occurs with version 1.84 of > > > sys_machdep.c and let you know. > > > > Yup, reverting to 1.84 unbreaks this for me. Looking at the changes > > made it appears to me that the check > > > > if (uap->start < NLDT || uap->num <= 0) > > return (EINVAL);i > > > > causes this, because NLDT is 6 and the NVidia stuff passes > > uap->start == 6 to this call. > > It can't use 6. FreeBSD reserves 0-16 for its own use. > > I think the bug was in the old code allowing this to > happen... Looking at segments.h..... /* * Entries in the Local Descriptor Table (LDT) */ #define LSYS5CALLS_SEL 0 /* forced by intel BCS */ #define LSYS5SIGR_SEL 1 #define L43BSDCALLS_SEL 2 /* notyet */ #define LUCODE_SEL 3 #define LSOL26CALLS_SEL 4 /* Solaris >= 2.6 system call gate */ #define LUDATA_SEL 5 /* separate stack, es,fs,gs sels ? */ /* #define LPOSIXCALLS_SEL 5*/ /* notyet */ #define LBSDICALLS_SEL 16 /* BSDI system call gate */ #define NLDT (LBSDICALLS_SEL + 1) it looks like NLDT should be save between from 6 to 15 (though I wish they'd chosen a different value) so we could add: if ((uap->start == LBSDICALLS_SEL) || (uap->start <= LUDATA_SEL)) || (uap->num <= 0)) ... What do you think? > > -- > Dan Eischen > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0308011511170.46065-100000>