From owner-freebsd-current@FreeBSD.ORG Fri Aug 1 15:33:40 2003 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id A867237B401 for ; Fri, 1 Aug 2003 15:33:40 -0700 (PDT) Received: from mail.pcnet.com (mail.pcnet.com [204.213.232.4]) by mx1.FreeBSD.org (Postfix) with ESMTP id 900A743F93 for ; Fri, 1 Aug 2003 15:33:39 -0700 (PDT) (envelope-from eischen@vigrid.com) Received: from mail.pcnet.com (mail.pcnet.com [204.213.232.4]) by mail.pcnet.com (8.12.8/8.12.1) with ESMTP id h71MXXax015603; Fri, 1 Aug 2003 18:33:34 -0400 (EDT) Date: Fri, 1 Aug 2003 18:33:33 -0400 (EDT) From: Daniel Eischen X-Sender: eischen@pcnet5.pcnet.com To: Julian Elischer In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: Thorsten Greiner cc: current@freebsd.org Subject: Re: NVidia glx stuff dies in sysarch(I386_SET_LDT, ...) X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: deischen@freebsd.org List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 01 Aug 2003 22:33:41 -0000 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 [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? I think it could work, but do we want it to work? If we are really reserving the first 17 (16 really, since 0 is invalid), then what are we to do if we want to use another one? Do we add NVidia's LDTs to segments.h so that we, or anyone else, will not use them? We could make a new syscall and use the old one for compat behavior, or make it a compile time option... If they ever recompile, they really want to be using the new interface, so I think breaking it by default would be good. -- Dan Eischen