Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 1 Aug 2003 15:25:18 -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.0308011522520.46065-100000@InterJet.elischer.org>
In-Reply-To: <Pine.BSF.4.21.0308011511170.46065-100000@InterJet.elischer.org>

next in thread | previous in thread | raw e-mail | index | archive | help


On Fri, 1 Aug 2003, Julian Elischer wrote:

> 
> 
> 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:

I might add that this si slightly bogus as you an't have aproces being
a BSDI binary and a SOLARIS binary and a BCS binary all at  the same
time, and we don't set any values on most (any?) of these
segments for FreeBSD binaries..



> 
> if ((uap->start == LBSDICALLS_SEL) || (uap->start <= LUDATA_SEL)) ||
>     (uap->num <= 0))
> ...
> 
> What do you think?
> 
> > 
> > -- 
> > Dan Eischen
> > 
> > 
> 
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
> 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0308011522520.46065-100000>