Date: Mon, 5 Nov 2007 15:01:06 +0200 From: Kostik Belousov <kostikbel@gmail.com> To: "Valery V.Chikalov" <valera@chikalov.dp.ua> Cc: freebsd-emulation@freebsd.org Subject: Re: Linux emulation on FreeBSD AMD64 Message-ID: <20071105130106.GQ37471@deviant.kiev.zoral.com.ua> In-Reply-To: <472F0F82.8070002@chikalov.dp.ua> References: <472B0454.9040408@chikalov.dp.ua> <472B9CD1.1010607@chikalov.dp.ua> <472DAF60.9040008@chikalov.dp.ua> <20071104122023.GA5528@freebsd.org> <472DC7C3.3090105@chikalov.dp.ua> <20071104133518.GA7275@freebsd.org> <20071104171423.GL37471@deviant.kiev.zoral.com.ua> <472E067A.5050601@chikalov.dp.ua> <20071105095053.GP37471@deviant.kiev.zoral.com.ua> <472F0F82.8070002@chikalov.dp.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
--GuCODRLlE2VjZS/b Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Nov 05, 2007 at 02:41:38PM +0200, Valery V.Chikalov wrote: > Kostik Belousov wrote: > >On Sun, Nov 04, 2007 at 07:50:50PM +0200, Valery V.Chikalov wrote: > >>Kostik Belousov wrote: > >>[...] > >> > >>Index: vmparam.h > >>=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > >>RCS file: /home/ncvs/src/sys/amd64/include/vmparam.h,v > >>retrieving revision 1.49 > >>diff -u -r1.49 vmparam.h > >>--- vmparam.h 25 Sep 2007 06:25:04 -0000 1.49 > >>+++ vmparam.h 4 Nov 2007 14:43:39 -0000 > >>@@ -45,6 +45,10 @@ > >> #ifndef _MACHINE_VMPARAM_H_ > >> #define _MACHINE_VMPARAM_H_ 1 > >> > >>+#ifdef COMPAT_IA32 > >>+#define VM_PROT_READ_IS_EXEC /* if you can read -- then you can exe= c=20 > >>*/ > >>+#endif > >>+ > >No, this is wrong fix. It changes the ABI for freebsd binaries, and does > >this not only for SysV shm, but for any readable mapping. > > > >Instead, the following things shall be made: >=20 > Thanks, will try to do it this way. >=20 > But, just for curiosity and for my education. >=20 > My point from teh beginning was: we must find differences between linux= =20 > emulations in __i386__ and __amd64__(dont take it too literally, I dont= =20 > mean diff /sys/i386/xxx /sys/amd64/xxx :-)), because oracle is running=20 > perfectly in __i386__ mode and failed to run in __amd64__. >=20 > On the first glance such difference was found: VM_PROT_READ_IS_EXEC is=20 > defined in /sys/[i386|arm]/include/vmparam.h but not in=20 > /sys/amd64/include/vmparam.h. AMD64 (and, in fact, some i386, when running in PAE mode) has so-called execution-disable bit in the page protection attributes. The patch would make the PROT_READ =3D=3D PROT_READ | PROT_EXEC unconditionally. >=20 > But: > 1) you claim that this is wrong. > So, why? Why this is right for i386|arm and wrong for amd64. >=20 > > 1. linux_shmat() shall call kern_shmat(). > > 2. kern_shmat() shall take the flag that would force the read mapping > > to be also executable. > > 3. this flag shall be set when kern_shmat() is called from linux_shmat(= ), > > and not set when called from shmat(). >=20 > Why this is not applicable to i386 mode? Good question, I did not looked into the details of handling PROT_EXEC on i386 when nx bit is supported. FreeBSD definitely ignores PT_GNU_STACK for non-executable stacks, I am not sure what could break with this on i386. --GuCODRLlE2VjZS/b Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (FreeBSD) iD8DBQFHLxQRC3+MBN1Mb4gRAqTMAKCroUU1OC9jv1GFVIsUnmOYTEvHhwCgwtOn jx+2sD5eRBGzKpTHTklOTsg= =LITX -----END PGP SIGNATURE----- --GuCODRLlE2VjZS/b--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20071105130106.GQ37471>
