Push solock() down to sosend() for SOCK_RAW sockets.
authormvs <mvs@openbsd.org>
Tue, 30 Apr 2024 17:59:15 +0000 (17:59 +0000)
committermvs <mvs@openbsd.org>
Tue, 30 Apr 2024 17:59:15 +0000 (17:59 +0000)
commita6ba80fb8d43dccd80e052ae04e9a1ae97e61337
tree86c969cade85d144285611b42d6786211838650e
parentab0363c32c56eb9055d8521c868e670bd813bafc
Push  solock() down to sosend() for SOCK_RAW sockets.

Raw sockets are the simplest inet sockets, so use them to start landing
`sb_mtx' mutex(9) protection for `so_snd' buffer. Now solock() is taken
only around pru_send*(), the rest of sosend() serialized by sblock() and
`sb_mtx'. The unlocked SS_ISCONNECTED check is fine, because
rip{,6}_send() check it. Also, previously the SS_ISCONNECTED could be
lost due to solock() release around following m_getuio().

ok bluhm
sys/kern/sys_socket.c
sys/kern/uipc_socket.c
sys/kern/uipc_socket2.c