cvs commit: src/sys/alpha/linux linux_sysvec.c src/sys/alpha/osf1 imgact_osf1.c osf1_sysvec.c src/sys/amd64/linux32 linux32_sysvec.c src/sys/compat/ia32 ia32_sysvec.c src/sys/compat/pecoff imgact_pecoff.c src/sys/compat/svr4 imgact_svr4.c svr4_sysvec.c ...

John Baldwin jhb at FreeBSD.org
Tue Feb 1 06:56:05 PST 2005


On Monday 31 January 2005 06:10 pm, Maxim Sobolev wrote:
> John Baldwin wrote:
> > On Saturday 29 January 2005 06:12 pm, Maxim Sobolev wrote:
> >>sobomax     2005-01-29 23:12:00 UTC
> >>
> >>  FreeBSD src repository
> >>
> >>  Modified files:
> >>    sys/alpha/linux      linux_sysvec.c
> >>    sys/alpha/osf1       imgact_osf1.c osf1_sysvec.c
> >>    sys/amd64/linux32    linux32_sysvec.c
> >>    sys/compat/ia32      ia32_sysvec.c
> >>    sys/compat/pecoff    imgact_pecoff.c
> >>    sys/compat/svr4      imgact_svr4.c svr4_sysvec.c
> >>    sys/i386/ibcs2       ibcs2_sysvec.c imgact_coff.c
> >>    sys/i386/linux       imgact_linux.c linux_sysvec.c
> >>                         linux_machdep.c
> >>    sys/kern             imgact_aout.c imgact_elf.c imgact_gzip.c
> >>                         imgact_shell.c kern_exec.c kern_kse.c
> >>    sys/modules          Makefile
> >>    sys/sys              imgact.h syscallsubr.h
> >>  Log:
> >>  o Split out kernel part of execve(2) syscall into two parts: one that
> >>    copies arguments into the kernel space and one that operates
> >>    completely in the kernel space;
> >>
> >>  o use kernel-only version of execve(2) to kill another stackgap in
> >>    linuxlator/i386.
> >>
> >>  Obtained from:  DragonFlyBSD (partially)
> >>  MFC after:      2 weeks
> >
> > Cool, this had been on my anti-stackgap todo list as well.
> >
> :-)
>
> We have been tolerating this stackgap hack for too long.
>
> Right now linuxlator/i386 is almost stackgap-free. The only remaining
> stackgap is in semctl(2) syscal, which in my opinion it is very
> over/under engineered API, so that there is no a good clean way to do
> the split. At the same time, it's not the one used oftenly, so that  I
> can wait when I (or somebody else) is in the right mood to do the
> remaining work.
>
> Other arches/emulation layers are awaiting for somebody (maintainers?)
> to do the work, which will be very easy one, since most popular kernel
> interfaces that work on userland structures/buffers have been split.

That's not the only one.  All the filesystem system calls use the stackgap to 
handle the /compat/linux namespace.  Fixing that will not be trivial, as it 
will involve teaching namei() to retrieve filenames using a uio or some such 
so that names can either be in user space or in kernel space.  Either that or 
we add native support for prefixes like /compat/foo to namei() by sticking a 
pointer to a prefix in struct sysent or some such.

-- 
John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org


More information about the cvs-src mailing list