svn commit: r218836 - in stable/8/sys: amd64/amd64 amd64/ia32 i386/i386 kern

Oliver Pinter oliver.pntr at gmail.com
Sat Apr 16 21:34:09 UTC 2011


MFC this for 7-STABLE?

On 2/19/11, Konstantin Belousov <kib at freebsd.org> wrote:
> Author: kib
> Date: Sat Feb 19 07:39:14 2011
> New Revision: 218836
> URL: http://svn.freebsd.org/changeset/base/218836
>
> Log:
>   MFC r218327:
>   Clear the padding when returning context to the usermode.
>
> Modified:
>   stable/8/sys/amd64/amd64/machdep.c
>   stable/8/sys/amd64/ia32/ia32_signal.c
>   stable/8/sys/i386/i386/machdep.c
>   stable/8/sys/kern/kern_context.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)
>
> Modified: stable/8/sys/amd64/amd64/machdep.c
> ==============================================================================
> --- stable/8/sys/amd64/amd64/machdep.c	Sat Feb 19 03:32:10 2011	(r218835)
> +++ stable/8/sys/amd64/amd64/machdep.c	Sat Feb 19 07:39:14 2011	(r218836)
> @@ -329,6 +329,9 @@ sendsig(sig_t catcher, ksiginfo_t *ksi,
>  	fpstate_drop(td);
>  	sf.sf_uc.uc_mcontext.mc_fsbase = td->td_pcb->pcb_fsbase;
>  	sf.sf_uc.uc_mcontext.mc_gsbase = td->td_pcb->pcb_gsbase;
> +	bzero(sf.sf_uc.uc_mcontext.mc_spare,
> +	    sizeof(sf.sf_uc.uc_mcontext.mc_spare));
> +	bzero(sf.sf_uc.__spare__, sizeof(sf.sf_uc.__spare__));
>
>  	/* Allocate space for the signal handler context. */
>  	if ((td->td_pflags & TDP_ALTSTACK) != 0 && !oonstack &&
> @@ -350,6 +353,7 @@ sendsig(sig_t catcher, ksiginfo_t *ksi,
>  	/* Build the argument list for the signal handler. */
>  	regs->tf_rdi = sig;			/* arg 1 in %rdi */
>  	regs->tf_rdx = (register_t)&sfp->sf_uc;	/* arg 3 in %rdx */
> +	bzero(&sf.sf_si, sizeof(sf.sf_si));
>  	if (SIGISMEMBER(psp->ps_siginfo, sig)) {
>  		/* Signal handler installed with SA_SIGINFO. */
>  		regs->tf_rsi = (register_t)&sfp->sf_si;	/* arg 2 in %rsi */
> @@ -2034,6 +2038,7 @@ get_mcontext(struct thread *td, mcontext
>  	get_fpcontext(td, mcp);
>  	mcp->mc_fsbase = td->td_pcb->pcb_fsbase;
>  	mcp->mc_gsbase = td->td_pcb->pcb_gsbase;
> +	bzero(mcp->mc_spare, sizeof(mcp->mc_spare));
>  	return (0);
>  }
>
>
> Modified: stable/8/sys/amd64/ia32/ia32_signal.c
> ==============================================================================
> --- stable/8/sys/amd64/ia32/ia32_signal.c	Sat Feb 19 03:32:10 2011	(r218835)
> +++ stable/8/sys/amd64/ia32/ia32_signal.c	Sat Feb 19 07:39:14 2011	(r218836)
> @@ -164,6 +164,8 @@ ia32_get_mcontext(struct thread *td, str
>  	ia32_get_fpcontext(td, mcp);
>  	mcp->mc_fsbase = td->td_pcb->pcb_fsbase;
>  	mcp->mc_gsbase = td->td_pcb->pcb_gsbase;
> +	bzero(mcp->mc_spare1, sizeof(mcp->mc_spare1));
> +	bzero(mcp->mc_spare2, sizeof(mcp->mc_spare2));
>  	td->td_pcb->pcb_full_iret = 1;
>  	return (0);
>  }
> @@ -230,6 +232,7 @@ freebsd32_getcontext(struct thread *td,
>  		PROC_LOCK(td->td_proc);
>  		uc.uc_sigmask = td->td_sigmask;
>  		PROC_UNLOCK(td->td_proc);
> +		bzero(&uc.__spare__, sizeof(uc.__spare__));
>  		ret = copyout(&uc, uap->ucp, UC_COPY_SIZE);
>  	}
>  	return (ret);
> @@ -345,6 +348,11 @@ freebsd4_ia32_sendsig(sig_t catcher, ksi
>  	sf.sf_uc.uc_mcontext.mc_es = regs->tf_es;
>  	sf.sf_uc.uc_mcontext.mc_fs = regs->tf_fs;
>  	sf.sf_uc.uc_mcontext.mc_gs = regs->tf_gs;
> +	bzero(sf.sf_uc.uc_mcontext.mc_fpregs,
> +	    sizeof(sf.sf_uc.uc_mcontext.mc_fpregs));
> +	bzero(sf.sf_uc.uc_mcontext.__spare__,
> +	    sizeof(sf.sf_uc.uc_mcontext.__spare__));
> +	bzero(sf.sf_uc.__spare__, sizeof(sf.sf_uc.__spare__));
>
>  	/* Allocate space for the signal handler context. */
>  	if ((td->td_pflags & TDP_ALTSTACK) != 0 && !oonstack &&
> @@ -362,6 +370,7 @@ freebsd4_ia32_sendsig(sig_t catcher, ksi
>  	/* Build the argument list for the signal handler. */
>  	sf.sf_signum = sig;
>  	sf.sf_ucontext = (register_t)&sfp->sf_uc;
> +	bzero(&sf.sf_si, sizeof(sf.sf_si));
>  	if (SIGISMEMBER(psp->ps_siginfo, sig)) {
>  		/* Signal handler installed with SA_SIGINFO. */
>  		sf.sf_siginfo = (u_int32_t)(uintptr_t)&sfp->sf_si;
> @@ -464,6 +473,7 @@ ia32_sendsig(sig_t catcher, ksiginfo_t *
>  	fpstate_drop(td);
>  	sf.sf_uc.uc_mcontext.mc_fsbase = td->td_pcb->pcb_fsbase;
>  	sf.sf_uc.uc_mcontext.mc_gsbase = td->td_pcb->pcb_gsbase;
> +	bzero(sf.sf_uc.__spare__, sizeof(sf.sf_uc.__spare__));
>
>  	/* Allocate space for the signal handler context. */
>  	if ((td->td_pflags & TDP_ALTSTACK) != 0 && !oonstack &&
> @@ -483,6 +493,7 @@ ia32_sendsig(sig_t catcher, ksiginfo_t *
>  	/* Build the argument list for the signal handler. */
>  	sf.sf_signum = sig;
>  	sf.sf_ucontext = (register_t)&sfp->sf_uc;
> +	bzero(&sf.sf_si, sizeof(sf.sf_si));
>  	if (SIGISMEMBER(psp->ps_siginfo, sig)) {
>  		/* Signal handler installed with SA_SIGINFO. */
>  		sf.sf_siginfo = (u_int32_t)(uintptr_t)&sfp->sf_si;
>
> Modified: stable/8/sys/i386/i386/machdep.c
> ==============================================================================
> --- stable/8/sys/i386/i386/machdep.c	Sat Feb 19 03:32:10 2011	(r218835)
> +++ stable/8/sys/i386/i386/machdep.c	Sat Feb 19 07:39:14 2011	(r218836)
> @@ -379,12 +379,14 @@ osendsig(sig_t catcher, ksiginfo_t *ksi,
>  	/* Build the argument list for the signal handler. */
>  	sf.sf_signum = sig;
>  	sf.sf_scp = (register_t)&fp->sf_siginfo.si_sc;
> +	bzero(&sf.sf_siginfo, sizeof(sf.sf_siginfo));
>  	if (SIGISMEMBER(psp->ps_siginfo, sig)) {
>  		/* Signal handler installed with SA_SIGINFO. */
>  		sf.sf_arg2 = (register_t)&fp->sf_siginfo;
>  		sf.sf_siginfo.si_signo = sig;
>  		sf.sf_siginfo.si_code = ksi->ksi_code;
>  		sf.sf_ahu.sf_action = (__osiginfohandler_t *)catcher;
> +		sf.sf_addr = 0;
>  	} else {
>  		/* Old FreeBSD-style arguments. */
>  		sf.sf_arg2 = ksi->ksi_code;
> @@ -498,6 +500,11 @@ freebsd4_sendsig(sig_t catcher, ksiginfo
>  	sf.sf_uc.uc_mcontext.mc_onstack = (oonstack) ? 1 : 0;
>  	sf.sf_uc.uc_mcontext.mc_gs = rgs();
>  	bcopy(regs, &sf.sf_uc.uc_mcontext.mc_fs, sizeof(*regs));
> +	bzero(sf.sf_uc.uc_mcontext.mc_fpregs,
> +	    sizeof(sf.sf_uc.uc_mcontext.mc_fpregs));
> +	bzero(sf.sf_uc.uc_mcontext.__spare__,
> +	    sizeof(sf.sf_uc.uc_mcontext.__spare__));
> +	bzero(sf.sf_uc.__spare__, sizeof(sf.sf_uc.__spare__));
>
>  	/* Allocate space for the signal handler context. */
>  	if ((td->td_pflags & TDP_ALTSTACK) != 0 && !oonstack &&
> @@ -517,6 +524,7 @@ freebsd4_sendsig(sig_t catcher, ksiginfo
>  	/* Build the argument list for the signal handler. */
>  	sf.sf_signum = sig;
>  	sf.sf_ucontext = (register_t)&sfp->sf_uc;
> +	bzero(&sf.sf_si, sizeof(sf.sf_si));
>  	if (SIGISMEMBER(psp->ps_siginfo, sig)) {
>  		/* Signal handler installed with SA_SIGINFO. */
>  		sf.sf_siginfo = (register_t)&sfp->sf_si;
> @@ -643,6 +651,11 @@ sendsig(sig_t catcher, ksiginfo_t *ksi,
>  	sdp = &td->td_pcb->pcb_gsd;
>  	sf.sf_uc.uc_mcontext.mc_gsbase = sdp->sd_hibase << 24 |
>  	    sdp->sd_lobase;
> +	bzero(sf.sf_uc.uc_mcontext.mc_spare1,
> +	    sizeof(sf.sf_uc.uc_mcontext.mc_spare1));
> +	bzero(sf.sf_uc.uc_mcontext.mc_spare2,
> +	    sizeof(sf.sf_uc.uc_mcontext.mc_spare2));
> +	bzero(sf.sf_uc.__spare__, sizeof(sf.sf_uc.__spare__));
>
>  	/* Allocate space for the signal handler context. */
>  	if ((td->td_pflags & TDP_ALTSTACK) != 0 && !oonstack &&
> @@ -664,6 +677,7 @@ sendsig(sig_t catcher, ksiginfo_t *ksi,
>  	/* Build the argument list for the signal handler. */
>  	sf.sf_signum = sig;
>  	sf.sf_ucontext = (register_t)&sfp->sf_uc;
> +	bzero(&sf.sf_si, sizeof(sf.sf_si));
>  	if (SIGISMEMBER(psp->ps_siginfo, sig)) {
>  		/* Signal handler installed with SA_SIGINFO. */
>  		sf.sf_siginfo = (register_t)&sfp->sf_si;
> @@ -3268,7 +3282,8 @@ get_mcontext(struct thread *td, mcontext
>  	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;
> -
> +	bzero(mcp->mc_spare1, sizeof(mcp->mc_spare1));
> +	bzero(mcp->mc_spare2, sizeof(mcp->mc_spare2));
>  	return (0);
>  }
>
> @@ -3317,6 +3332,7 @@ get_fpcontext(struct thread *td, mcontex
>  #ifndef DEV_NPX
>  	mcp->mc_fpformat = _MC_FPFMT_NODEV;
>  	mcp->mc_ownedfp = _MC_FPOWNED_NONE;
> +	bzero(mcp->mc_fpstate, sizeof(mcp->mc_fpstate));
>  #else
>  	mcp->mc_ownedfp = npxgetregs(td);
>  	bcopy(&td->td_pcb->pcb_user_save, &mcp->mc_fpstate,
>
> Modified: stable/8/sys/kern/kern_context.c
> ==============================================================================
> --- stable/8/sys/kern/kern_context.c	Sat Feb 19 03:32:10 2011	(r218835)
> +++ stable/8/sys/kern/kern_context.c	Sat Feb 19 07:39:14 2011	(r218836)
> @@ -71,6 +71,7 @@ getcontext(struct thread *td, struct get
>  		PROC_LOCK(td->td_proc);
>  		uc.uc_sigmask = td->td_sigmask;
>  		PROC_UNLOCK(td->td_proc);
> +		bzero(uc.__spare__, sizeof(uc.__spare__));
>  		ret = copyout(&uc, uap->ucp, UC_COPY_SIZE);
>  	}
>  	return (ret);
> @@ -107,6 +108,7 @@ swapcontext(struct thread *td, struct sw
>  		ret = EINVAL;
>  	else {
>  		get_mcontext(td, &uc.uc_mcontext, GET_MC_CLEAR_RET);
> +		bzero(uc.__spare__, sizeof(uc.__spare__));
>  		PROC_LOCK(td->td_proc);
>  		uc.uc_sigmask = td->td_sigmask;
>  		PROC_UNLOCK(td->td_proc);
> _______________________________________________
> svn-src-stable at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/svn-src-stable
> To unsubscribe, send any mail to "svn-src-stable-unsubscribe at freebsd.org"
>


More information about the svn-src-stable-8 mailing list