From owner-freebsd-bugs Sun May 12 22:20: 8 2002 Delivered-To: freebsd-bugs@hub.freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id AF23E37B408 for ; Sun, 12 May 2002 22:20:01 -0700 (PDT) Received: (from gnats@localhost) by freefall.freebsd.org (8.11.6/8.11.6) id g4D5K1d38715; Sun, 12 May 2002 22:20:01 -0700 (PDT) (envelope-from gnats) Received: from nwww.freebsd.org (www.FreeBSD.org [216.136.204.117]) by hub.freebsd.org (Postfix) with ESMTP id A7B1137B407 for ; Sun, 12 May 2002 22:16:36 -0700 (PDT) Received: from www.freebsd.org (localhost [127.0.0.1]) by nwww.freebsd.org (8.12.2/8.12.2) with ESMTP id g4D5GZhG027513 for ; Sun, 12 May 2002 22:16:35 -0700 (PDT) (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.12.2/8.12.2/Submit) id g4D5GZh8027512; Sun, 12 May 2002 22:16:35 -0700 (PDT) Message-Id: <200205130516.g4D5GZh8027512@www.freebsd.org> Date: Sun, 12 May 2002 22:16:35 -0700 (PDT) From: David Xu To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-1.0 Subject: i386/38016: i386_get_ldt range checking bug Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org >Number: 38016 >Category: i386 >Synopsis: i386_get_ldt range checking bug >Confidential: no >Severity: critical >Priority: high >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sun May 12 22:20:00 PDT 2002 >Closed-Date: >Last-Modified: >Originator: David Xu >Release: FreeBSD 5.0-CURRENT >Organization: Viatech >Environment: FreeBSD davidbsd.viasoft.com.cn 5.0-CURRENT FreeBSD 5.0-CURRENT #23: Mon May 13 12:16:30 CST 2002 davidx@davidbsd.viasoft.com.cn:/usr/src/sys/i386/compile/xu i386 >Description: function i386_get_ldt() in sys_machdep.c has range checking bug, it allow program to access LDT out of bound, may cause page fault. >How-To-Repeat: >Fix: --- /usr/src/sys/i386/i386/sys_machdep.c Wed Apr 3 02:37:41 2002 +++ /usr/src/sys/i386/i386/sys_machdep.c.new Mon May 13 11:11:19 2002 @@ -363,6 +363,7 @@ char *args; { int error = 0; + int largest_ld; struct proc_ldt *pldt = td->td_proc->p_md.md_ldt; int nldt, num; union descriptor *lp; @@ -389,7 +390,8 @@ num = min(uap->num, nldt); lp = &ldt[uap->start]; } - if (uap->start > nldt) + largest_ld = uap->start + num - 1; + if (uap->start >= nldt || largest_ld >= nldt) return(EINVAL); error = copyout(lp, uap->descs, num * sizeof(union descriptor)); >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message