From tijl@coosemans.org  Sat Jul  3 16:18:38 2010
Return-Path: <tijl@coosemans.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id D5E72106564A
	for <FreeBSD-gnats-submit@freebsd.org>; Sat,  3 Jul 2010 16:18:38 +0000 (UTC)
	(envelope-from tijl@coosemans.org)
Received: from mailrelay003.isp.belgacom.be (mailrelay003.isp.belgacom.be [195.238.6.53])
	by mx1.freebsd.org (Postfix) with ESMTP id 742468FC0C
	for <FreeBSD-gnats-submit@freebsd.org>; Sat,  3 Jul 2010 16:18:37 +0000 (UTC)
Received: from 180.126-177-91.adsl-dyn.isp.belgacom.be (HELO kalimero.tijl.coosemans.org) ([91.177.126.180])
  by relay.skynet.be with ESMTP; 03 Jul 2010 18:18:36 +0200
Received: from kalimero.tijl.coosemans.org (kalimero.tijl.coosemans.org [127.0.0.1])
	by kalimero.tijl.coosemans.org (8.14.4/8.14.4) with ESMTP id o63GIaLk003971
	for <FreeBSD-gnats-submit@freebsd.org>; Sat, 3 Jul 2010 18:18:36 +0200 (CEST)
	(envelope-from tijl@kalimero.tijl.coosemans.org)
Received: (from tijl@localhost)
	by kalimero.tijl.coosemans.org (8.14.4/8.14.4/Submit) id o63GIao0003970;
	Sat, 3 Jul 2010 18:18:36 +0200 (CEST)
	(envelope-from tijl)
Message-Id: <201007031618.o63GIao0003970@kalimero.tijl.coosemans.org>
Date: Sat, 3 Jul 2010 18:18:36 +0200 (CEST)
From: Tijl Coosemans <tijl@coosemans.org>
Reply-To: Tijl Coosemans <tijl@coosemans.org>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: [patch] i386 mcontext has fsbase and gsbase fields swapped
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         148344
>Category:       i386
>Synopsis:       [patch] i386 mcontext has fsbase and gsbase fields swapped
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    tijl
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Jul 03 16:20:00 UTC 2010
>Closed-Date:    Tue Jul 27 13:19:42 UTC 2010
>Last-Modified:  Tue Jul 27 13:19:42 UTC 2010
>Originator:     Tijl Coosemans
>Release:        FreeBSD 8.1-PRERELEASE i386
>Organization:
>Environment:
>Description:
When setting up the i386 mcontext (e.g. when delivering a signal)
FreeBSD stores fsbase in the gsbase field and gsbase in the fsbase
field.
>How-To-Repeat:
>Fix:

--- patch-fsgsbase begins here ---
diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c
index 502aa4f..872d09b 100644
--- a/sys/i386/i386/machdep.c
+++ b/sys/i386/i386/machdep.c
@@ -645,10 +645,10 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
 	/*
 	 * Unconditionally fill the fsbase and gsbase into the mcontext.
 	 */
-	sdp = &td->td_pcb->pcb_gsd;
+	sdp = &td->td_pcb->pcb_fsd;
 	sf.sf_uc.uc_mcontext.mc_fsbase = sdp->sd_hibase << 24 |
 	    sdp->sd_lobase;
-	sdp = &td->td_pcb->pcb_fsd;
+	sdp = &td->td_pcb->pcb_gsd;
 	sf.sf_uc.uc_mcontext.mc_gsbase = sdp->sd_hibase << 24 |
 	    sdp->sd_lobase;
 
@@ -3255,9 +3255,9 @@ get_mcontext(struct thread *td, mcontext_t *mcp, int flags)
 	 * mcontext after mc_fpstate.
 	 */
 	get_fpcontext(td, mcp);
-	sdp = &td->td_pcb->pcb_gsd;
-	mcp->mc_fsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;
 	sdp = &td->td_pcb->pcb_fsd;
+	mcp->mc_fsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;
+	sdp = &td->td_pcb->pcb_gsd;
 	mcp->mc_gsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;
 
 	return (0);
--- patch-fsgsbase ends here ---

>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-i386->tijl 
Responsible-Changed-By: tijl 
Responsible-Changed-When: Tue Jul 20 11:46:00 UTC 2010 
Responsible-Changed-Why:  
Take my own PR. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=148344 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: i386/148344: commit references a PR
Date: Tue, 20 Jul 2010 12:39:25 +0000 (UTC)

 Author: tijl
 Date: Tue Jul 20 12:36:36 2010
 New Revision: 210294
 URL: http://svn.freebsd.org/changeset/base/210294
 
 Log:
   Store fsbase and gsbase in the right fields of the mcontext. They were
   switched.
   
   PR:		i386/148344
   Approved by:	kib (mentor)
   MFC after:	1 week
 
 Modified:
   head/sys/i386/i386/machdep.c
   head/sys/pc98/pc98/machdep.c
 
 Modified: head/sys/i386/i386/machdep.c
 ==============================================================================
 --- head/sys/i386/i386/machdep.c	Tue Jul 20 11:46:45 2010	(r210293)
 +++ head/sys/i386/i386/machdep.c	Tue Jul 20 12:36:36 2010	(r210294)
 @@ -645,10 +645,10 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, 
  	/*
  	 * Unconditionally fill the fsbase and gsbase into the mcontext.
  	 */
 -	sdp = &td->td_pcb->pcb_gsd;
 +	sdp = &td->td_pcb->pcb_fsd;
  	sf.sf_uc.uc_mcontext.mc_fsbase = sdp->sd_hibase << 24 |
  	    sdp->sd_lobase;
 -	sdp = &td->td_pcb->pcb_fsd;
 +	sdp = &td->td_pcb->pcb_gsd;
  	sf.sf_uc.uc_mcontext.mc_gsbase = sdp->sd_hibase << 24 |
  	    sdp->sd_lobase;
  
 @@ -3255,9 +3255,9 @@ get_mcontext(struct thread *td, mcontext
  	 * mcontext after mc_fpstate.
  	 */
  	get_fpcontext(td, mcp);
 -	sdp = &td->td_pcb->pcb_gsd;
 -	mcp->mc_fsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;
  	sdp = &td->td_pcb->pcb_fsd;
 +	mcp->mc_fsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;
 +	sdp = &td->td_pcb->pcb_gsd;
  	mcp->mc_gsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;
  
  	return (0);
 
 Modified: head/sys/pc98/pc98/machdep.c
 ==============================================================================
 --- head/sys/pc98/pc98/machdep.c	Tue Jul 20 11:46:45 2010	(r210293)
 +++ head/sys/pc98/pc98/machdep.c	Tue Jul 20 12:36:36 2010	(r210294)
 @@ -580,10 +580,10 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, 
  	/*
  	 * Unconditionally fill the fsbase and gsbase into the mcontext.
  	 */
 -	sdp = &td->td_pcb->pcb_gsd;
 +	sdp = &td->td_pcb->pcb_fsd;
  	sf.sf_uc.uc_mcontext.mc_fsbase = sdp->sd_hibase << 24 |
  	    sdp->sd_lobase;
 -	sdp = &td->td_pcb->pcb_fsd;
 +	sdp = &td->td_pcb->pcb_gsd;
  	sf.sf_uc.uc_mcontext.mc_gsbase = sdp->sd_hibase << 24 |
  	    sdp->sd_lobase;
  
 @@ -2583,9 +2583,9 @@ get_mcontext(struct thread *td, mcontext
  	 * mcontext after mc_fpstate.
  	 */
  	get_fpcontext(td, mcp);
 -	sdp = &td->td_pcb->pcb_gsd;
 -	mcp->mc_fsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;
  	sdp = &td->td_pcb->pcb_fsd;
 +	mcp->mc_fsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;
 +	sdp = &td->td_pcb->pcb_gsd;
  	mcp->mc_gsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;
  
  	return (0);
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->patched 
State-Changed-By: tijl 
State-Changed-When: Tue Jul 20 12:46:30 UTC 2010 
State-Changed-Why:  


http://www.freebsd.org/cgi/query-pr.cgi?pr=148344 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: i386/148344: commit references a PR
Date: Tue, 27 Jul 2010 13:06:32 +0000 (UTC)

 Author: tijl
 Date: Tue Jul 27 13:06:18 2010
 New Revision: 210536
 URL: http://svn.freebsd.org/changeset/base/210536
 
 Log:
   MFC r210294:
   
   Store fsbase and gsbase in the right fields of the mcontext. They were
   switched.
   
   PR:		i386/148344
   Approved by:	kib (mentor)
 
 Modified:
   stable/8/sys/i386/i386/machdep.c
   stable/8/sys/pc98/pc98/machdep.c
 Directory Properties:
   stable/8/sys/   (props changed)
   stable/8/sys/amd64/include/xen/   (props changed)
   stable/8/sys/cddl/contrib/opensolaris/   (props changed)
   stable/8/sys/contrib/dev/acpica/   (props changed)
   stable/8/sys/contrib/pf/   (props changed)
   stable/8/sys/dev/xen/xenpci/   (props changed)
 
 Modified: stable/8/sys/i386/i386/machdep.c
 ==============================================================================
 --- stable/8/sys/i386/i386/machdep.c	Tue Jul 27 12:53:53 2010	(r210535)
 +++ stable/8/sys/i386/i386/machdep.c	Tue Jul 27 13:06:18 2010	(r210536)
 @@ -644,10 +644,10 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, 
  	/*
  	 * Unconditionally fill the fsbase and gsbase into the mcontext.
  	 */
 -	sdp = &td->td_pcb->pcb_gsd;
 +	sdp = &td->td_pcb->pcb_fsd;
  	sf.sf_uc.uc_mcontext.mc_fsbase = sdp->sd_hibase << 24 |
  	    sdp->sd_lobase;
 -	sdp = &td->td_pcb->pcb_fsd;
 +	sdp = &td->td_pcb->pcb_gsd;
  	sf.sf_uc.uc_mcontext.mc_gsbase = sdp->sd_hibase << 24 |
  	    sdp->sd_lobase;
  
 @@ -3255,9 +3255,9 @@ get_mcontext(struct thread *td, mcontext
  	 * mcontext after mc_fpstate.
  	 */
  	get_fpcontext(td, mcp);
 -	sdp = &td->td_pcb->pcb_gsd;
 -	mcp->mc_fsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;
  	sdp = &td->td_pcb->pcb_fsd;
 +	mcp->mc_fsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;
 +	sdp = &td->td_pcb->pcb_gsd;
  	mcp->mc_gsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;
  
  	return (0);
 
 Modified: stable/8/sys/pc98/pc98/machdep.c
 ==============================================================================
 --- stable/8/sys/pc98/pc98/machdep.c	Tue Jul 27 12:53:53 2010	(r210535)
 +++ stable/8/sys/pc98/pc98/machdep.c	Tue Jul 27 13:06:18 2010	(r210536)
 @@ -566,10 +566,10 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, 
  	/*
  	 * Unconditionally fill the fsbase and gsbase into the mcontext.
  	 */
 -	sdp = &td->td_pcb->pcb_gsd;
 +	sdp = &td->td_pcb->pcb_fsd;
  	sf.sf_uc.uc_mcontext.mc_fsbase = sdp->sd_hibase << 24 |
  	    sdp->sd_lobase;
 -	sdp = &td->td_pcb->pcb_fsd;
 +	sdp = &td->td_pcb->pcb_gsd;
  	sf.sf_uc.uc_mcontext.mc_gsbase = sdp->sd_hibase << 24 |
  	    sdp->sd_lobase;
  
 @@ -2454,9 +2454,9 @@ get_mcontext(struct thread *td, mcontext
  	mcp->mc_ss = tp->tf_ss;
  	mcp->mc_len = sizeof(*mcp);
  	get_fpcontext(td, mcp);
 -	sdp = &td->td_pcb->pcb_gsd;
 -	mcp->mc_fsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;
  	sdp = &td->td_pcb->pcb_fsd;
 +	mcp->mc_fsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;
 +	sdp = &td->td_pcb->pcb_gsd;
  	mcp->mc_gsbase = sdp->sd_hibase << 24 | sdp->sd_lobase;
  
  	return (0);
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: patched->closed 
State-Changed-By: tijl 
State-Changed-When: Tue Jul 27 13:15:41 UTC 2010 
State-Changed-Why:  
MFC'd to RELENG_8. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=148344 
>Unformatted:
