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