syscall copy{in,out} separation

Matthew Dillon dillon at apollo.backplane.com
Sat Aug 23 09:20:39 PDT 2003


    This looks really good.  I think you do have to use dynamic allocation
    for accept*(), what you have now will crash the system :-) because
    the namelen set by userland may be larger then the locally declared
    sockaddr in accept().  I think it is acceptable to have accept1()
    return the sockaddr allocated by soaccept() and then have accept()
    FREE it.

    If you would like to make that change and post another patch set I will
    do a final run through, test, and commit it!

    p.s. this type of syscall separation work will allow us to completely
    throw away all the stackgap() nonsense in the emulation code.  Even
    though the emulation code will eventually be moved to userland this is a
    good example of a case where we we still need to keep things clean and
    in synch even though we might completely rewrite parts of it later on.

					-Matt
					Matthew Dillon 
					<dillon at xxxxxxxxxxxxx>

:Here's a patch that attempts to separate copy{in,out} from the bind(),
:connect() and accept() syscalls.
:
:http://gomerbud.com/daver/patches/dragonfly/syscall-separation-1.diff
:
:Would it be benificial to further modify accept() to use dynamic allocation
:for the sockaddr?  The structure isn't really that big.
:
:Also, if accept1() instead took a handle to the sockaddr, it would be
:possible to copyout the sockaddr returned by soaccept() and FREE() it
:without any allocatons happening in accept().  This would be similar to
:the way that getsockaddr() works.
:
:-- 
:   David P. Reese, Jr.                                     daver at xxxxxxxxxxxx






More information about the Submit mailing list