Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 4 Sep 2007 06:53:06 +0300
From:      Kostik Belousov <kostikbel@gmail.com>
To:        Bruce Evans <brde@optusnet.com.au>
Cc:        arch@freebsd.org, Roman Divacky <rdivacky@freebsd.org>, i386@freebsd.org
Subject:   Re: PSL_RF inclusion in PSL_USERCHANGE for i386
Message-ID:  <20070904035306.GB53667@deviant.kiev.zoral.com.ua>
In-Reply-To: <20070903105130.L48985@delplex.bde.org>
References:  <20070902173953.GA52566@freebsd.org> <20070903105130.L48985@delplex.bde.org>

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

[-- Attachment #1 --]
On Mon, Sep 03, 2007 at 11:18:37AM +1000, Bruce Evans wrote:
> 
> On Sun, 2 Sep 2007, Roman Divacky wrote:
> 
> >in i386/i386/machdep.c the set_regs() function sets i386 registers (called
> >by ptrace for example). it checks what eflags are being changed and 
> >compares
> >that with a mask of allowed flags to be changed. the mask is defined in 
> >psl.h
> >like this:
> >
> >#define PSL_USERCHANGE (PSL_C | PSL_PF | PSL_AF | PSL_Z | PSL_N | PSL_T \
> >                       | PSL_D | PSL_V | PSL_NT | PSL_AC | PSL_ID)
> >
> >PSL_RF (Flag to ensure single-step only happens once per instruction.). 
> >Can someone
> >tell me why this is omitted? I think its because of having in-kernel 
> >debugger.
> 
> I think it is just because user mode cannot set this flag directly,
> except probably in vm86 mode (vm86 support code already has special
> cases for it).  (Old) docs say that it can be set by popfl and iret,
> but popfl doesn't set it for me now and user mode cannot execute iret (?).
It can. It would result in exception when the normal privilege checks triggers,
but would execute as expected otherwise. For instance,

#include <sys/syscall.h>

	.text

	.globl	main
	.type	main, @function
main:	pushl	$12	/* _exit() code */
	pushfl
	pushl	%cs
	pushl	$2f

	iretl

1:	movl	$SYS_exit, %eax
	pushl	%eax
	int	$0x80

2:	pushl	$hello
	call	printf
	popl	%eax
	jmp	1b

	.size	main, . - main

hello:	.asciz	"Hello from iret\n"

[-- Attachment #2 --]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.4 (FreeBSD)

iD8DBQFG3NahC3+MBN1Mb4gRArvYAJ463KcW7Ryhk9Q70RpLY1hqKuUFoQCeO9Xw
v4RdylW+Gp4TNzhrLNA1Gwo=
=0i/3
-----END PGP SIGNATURE-----

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070904035306.GB53667>