summaryrefslogtreecommitdiff
path: root/sys/kern/uipc_socket.c
AgeCommit message (Collapse)Author
2014-12-11convert bcopy to memcpy/memmove. ok krwTed Unangst
2014-11-03Put the socket splicing fields into a seperate struct sosplice thatAlexander Bluhm
gets only allocated when needed. This way struct socket shrinks from 472 to 392 bytes on amd64. When splicing gets active, another 88 bytes are allocated for struct sosplice. OK dlg@
2014-09-09Delete the SS_ISCONFIRMING flag that supported delayed connectionPhilip Guenther
confirmation: it was only used for netiso, which was deleted a *decade* ago ok mpi@ claudio@ ports scan by sthen@
2014-09-08remove uneeded route.h includesJonathan Gray
ok miod@ mpi@
2014-08-31Add additional kernel interfaces for setting close-on-exec on fdsPhilip Guenther
when creating them: pipe2(), dup3(), accept4(), MSG_CMSG_CLOEXEC, SOCK_CLOEXEC. Includes SOCK_NONBLOCK support. ok matthew@
2014-07-13bzero -> memset. for the speeds.Ted Unangst
2014-07-09spellingTed Unangst
2014-06-08Use memcpy to copy the sogetopt() SO_SPLICE off_t value, for it may not beMiod Vallat
correctly aligned. Similar in spirit to 1.119.
2014-04-07Retire kernel support for SO_DONTROUTE, this time without breakingMartin Pieuchot
localhost connections. The plan is to always use the routing table for addresses and routes resolutions, so there is no future for an option that wants to bypass it. This option has never been implemented for IPv6 anyway, so let's just remove the IPv4 bits that you weren't aware of. Tested a least by lteo@, guenther@ and chrisz@, ok mikeb@, benno@
2014-03-30Eliminates struct pcred by moving the real and saved ugids intoPhilip Guenther
struct ucred; struct process then directly links to the ucred Based on a discussion at c2k10 or so before noting that FreeBSD and NetBSD did this too. ok matthew@
2014-03-28revert "Retire kernel support for SO_DONTROUTE" diff, which does bad thingsStuart Henderson
for localhost connections. discussed with deraadt@
2014-03-27Retire kernel support for SO_DONTROUTE, since the plan is to alwaysMartin Pieuchot
use the routing table there's no future for an option that wants to bypass it. This option has never been implemented for IPv6 anyway, so let's just remove the IPv4 bits that you weren't aware of. Tested by florian@, man pages inputs from jmc@, ok benno@
2014-03-18When creating a unix socket, save the PID for pf's log(user), even whenPhilip Guenther
not in the original thread. ok matthew@
2014-01-21Don't leak kernel stack in timeval padding in getsockopt(SO_{SND,RCV}TIMEO)Philip Guenther
ok mikeb@ deraadt@
2014-01-11When I created UDP socket splicing, I added the goto nextpkt loopAlexander Bluhm
to splice multiple UDP packets in the m_nextpkt list. Some profiling with TCP splicing showed that checking so_rcv.sb_mb is wrong. It causes several useless runs through the loop. Better check for nextrecord which contains the original m_nextpkt value of the mbuf. OK mikeb@
2013-12-10dead assignment; from david hill, ok claudioMike Belopuhov
2013-08-27Manipulate timevals seperately, not inside a mbuf. Alignment constraintsTheo de Raadt
miod ran into. ok miod matthew
2013-04-05remove some obsolete castsTed Unangst
2013-04-04Do not allow the listen(2) syscall for an already connected socket.Alexander Bluhm
This would create a weird set of states in TCP. FreeBSD has the same check. Issue found by and OK guenther@
2013-03-27Move soidle() into the big #ifdef SOCKET_SPLICE block to have itAlexander Bluhm
all in one place. Saves one additional #ifdef, no functional change. OK mikeb@
2013-03-19After a socket splicing timeout is fired, a network interrupt canAlexander Bluhm
unsplice() the sockets before soidle() goes to splsoftnet. In this case, unsplice() was called twice. So check wether splicing still exists within the splsoftnet protection. Uvm fault in sounsplice() reported by keith at scott-land dot net. OK claudio@
2013-02-16Fix a bug in udp socket splicing in case a packet gets diverted andAlexander Bluhm
spliced and routed to loopback. The content of the pf header in the mbuf was keeping the divert information on its way. Reinitialize the whole packet header of the mbuf and remove the mbuf tags when the packet gets spliced. OK claudio@ markus@
2013-01-17Expand the socket splicing functionality from TCP to UDP. MergeAlexander Bluhm
the code relevant for UDP from sosend() and soreceive() into somove(). That allows the kernel to directly transfer the UDP data from one socket to another. OK claudio@
2013-01-15Pass an EFBIG error to user land when the maximum splicing lengthAlexander Bluhm
has been reached. This creates a read event on the spliced source socket that can be noticed with select(2). So the kernel passes control to the relay process immediately. This could be used to log the end of an http request within a persistent connection. deraadt@ reyk@ mikeb@ like the idea
2013-01-15Changing the socket buffer flags sb_flags was not interrupt safeAlexander Bluhm
as |= and &= are non-atomic operations. To avoid additional locks, put the flags that have to be accessed from interrupt into a separate sb_flagsintr 32 bit integer field. sb_flagsintr is protected by splsoftnet. Input from miod@ deraadt@; OK deraadt@
2012-12-31Put the #ifdef SOCKBUF_DEBUG around sbcheck() into a SBCHECK macro.Alexander Bluhm
That is consistent to the SBLASTRECORDCHK and SBLASTMBUFCHK macros. OK markus@
2012-10-05add send(2) MSG_DONTWAIT support which enables us to choose nonblockingYASUOKA Masahiko
or blocking for each send(2) call. diff from UMEZAWA Takeshi ok bluhm
2012-09-20In somove() free the mbufs when necessary instead of freeing themAlexander Bluhm
in the release path. Especially accessing m in a KDASSERT() could go wrong. OK claudio@
2012-09-19When a socket is spliced, it may not wakeup the userland for reading.Alexander Bluhm
There was a small race in sorwakeup() where that could happen if we slept before the SB_SPLICE flag was set. ok claudio@
2012-09-19In somove() make the call to pr_usrreq(PRU_RCVD) under the sameAlexander Bluhm
conditions as in soreceive(). My goal is to make socket splicing less protocol dependent. ok claudio@
2012-09-17Fix indent white spaces.Alexander Bluhm
2012-07-22unp_dispose() walks not just the mbuf chain (m_next) but also the packetPhilip Guenthe
chain (m_nextpkt), so the mbuf passed to it must be disconnected completely from the socket buffer's chains. Problem noticed by yasuoka@; tweak from krw@, ok deraadt@
2012-07-10For setsockopt(SO_{SND,RCV}TIMEO), convert the timeval to ticks usingPhilip Guenthe
tvtohz() so that the rounding is correct and we don't time out a tick early ok claudio@
2012-07-10Try to cleanup the macro magic because of socket spliceing. Since structClaudio Jeker
socket is no longer affected by option SOCKET_SPLICE we can simplyfy the code. OK bluhm@
2012-07-07Fix two races in socket splicing. When somove() gets called fromAlexander Bluhm
sosplice() to move the data already there, it might sleep in m_copym(). Another process must not unsplice during that sleep, so also lock the receive buffer when sosplice is called with fd -1. The same sleep can allow network interrupts to modify the socket buffer. So use sbsync() to write back modifications within the loop instead of fixing the socket buffer after the loop. OK claudio@
2012-04-24In sosend() for AF_UNIX control message sending, correctly calculateTheo de Raadt
the size (internalized ones can be larger on some architectures) for fitting into the socket. Avoid getting confused by sb_hiwat as well. This fixes a variety of issues where sendmsg() would fail to deliver a fd set or fail to wait; even leading to file leakage. Worked on this with claudio for about a week...
2012-04-22Add struct proc * argument to FRELE() and FILE_SET_MATURE() inPhilip Guenthe
anticipation of further changes to closef(). No binary change. ok krw@ miod@ deraadt@
2012-03-23Make rusage totals, itimers, and profile settings per-process insteadPhilip Guenthe
of per-rthread. Handling of per-thread tick and runtime counters inspired by how FreeBSD does it. ok kettenis@
2012-03-17remove IP_JUMBO, SO_JUMBO, and RTF_JUMBO.David Gwynne
no objection from mcbride@ krw@ markus@ deraadt@
2012-03-14Close a race that would corrupt a sockbuf because the code that externalizesMark Kettenis
an SCM_RIGHTS message may sleep. Bits and pieces from NetBSD with some simplifications by yours truly. Fixes the "receive 1" panic seen by many. ok guenther@, claudio@
2011-08-23iPrevent that a socket splicing timeout error in one direction isAlexander Bluhm
also added to the other direction. ok mikeb@
2011-07-04Implement an idle timeout for the socket splicing. A new `sp_idle'Mike Belopuhov
field of the `splice' structure can be used to specify a period of inactivity after which splicing will be dissolved. ETIMEDOUT error retrieved with a SO_ERROR indicates the idle timeout expiration. With comments from and OK bluhm.
2011-07-02kqueue attach functions should return an errno or 0, not a plain 1. FixNicholas Marriott
the obvious cases to return EINVAL and ENXIO. ok tedu deraadt
2011-05-02recognize SO_RTABLE socket option at the SOL_SOCKET level;Mike Belopuhov
discussed with and ok claudio
2011-04-19Put splice cleanup code into a common function sounsplice().Alexander Bluhm
ok claudio@
2011-04-04Plug mbuf leaks in SO_PEERCRED by not double allocating mbufs intoClaudio Jeker
the same variable. Leak found with dlg's magic mbuf leakage finder. OK henning@, deraadt@
2011-04-04If the socket was half closed then don't let userland change theClaudio Jeker
socketbuffer size of the closed side since on half close the high watermark was set to 0. OK blambert@
2011-03-14When a process reads from a spliced socket that already got anAlexander Bluhm
end-of-file but still has data in the receive buffer, soreceive() should block until all data has been moved. To make kqueue work with socket splicing, it has to report spliced sockets as non-readable. ok deraadt@
2011-03-12There existed a race when a process was trying to read from a splicedAlexander Bluhm
socket. soreceive() releases splsoftnet for uiomove(). In that moment, somove() could pull the mbuf from the receive buffer. After that, soreceive removed the mbuf again. The corrupted length accounting resulted in a panic. The fix is to block read calls in soreceive() until splicing has been finished. just commit deraadt@
2011-02-28When the maximum splice length has been reached, send out the dataAlexander Bluhm
immediately by unsetting the SS_ISSENDING flag. This prevents a possible 5 seconds delay in socket splicing. ok markus@; commit it deraadt@