Fix source and drain confusion in socket splicing somove().
authorbluhm <bluhm@openbsd.org>
Sun, 14 Jul 2024 15:42:23 +0000 (15:42 +0000)
committerbluhm <bluhm@openbsd.org>
Sun, 14 Jul 2024 15:42:23 +0000 (15:42 +0000)
commit5c4501f2732f323269274241bf8609e54a6778d0
tree741908ef20446739f81876f0037e415f25c63c5f
parent39d7e1651e3abfcfbe785dcb785308ca7f506f40
Fix source and drain confusion in socket splicing somove().

If a large mbuf in the source socket buffer does not fit into the
drain buffer, split the mbuf.  But if the drain buffer still has
some data in it, stop moving data and try again later.  This skips
a potentially expensive mbuf operation.
When looking which socket buffer has to be locked, I found that the
length of the source send buffer was checked.  Change it to drain.
As this is a performance optimization for a special corner case,
noone noticed the bug.

OK sashan@
sys/kern/uipc_socket.c