[Bug 181741] Packet loss when 'control' messages are present with large data (sendmsg(2))

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Sat Aug 4 20:27:21 UTC 2018


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=181741

--- Comment #21 from commit-hook at freebsd.org ---
A commit references this bug:

Author: markj
Date: Sat Aug  4 20:26:55 UTC 2018
New revision: 337328
URL: https://svnweb.freebsd.org/changeset/base/337328

Log:
  Don't check rcv sockbuf limits when sending on a unix stream socket.

  sosend_generic() performs an initial comparison of the amount of data
  (including control messages) to be transmitted with the send buffer
  size. When transmitting on a unix socket, we then compare the amount
  of data being sent with the amount of space in the receive buffer size;
  if insufficient space is available, sbappendcontrol() returns an error
  and the data is lost.  This is easily triggered by sending control
  messages together with an amount of data roughly equal to the send
  buffer size, since the control message size may change in uipc_send()
  as file descriptors are internalized.

  Fix the problem by removing the space check in sbappendcontrol(),
  whose only consumer is the unix sockets code.  The stream sockets code
  uses the SB_STOP mechanism to ensure that senders will block if the
  receive buffer fills up.

  PR:           181741
  MFC after:    1 month
  Sponsored by: The FreeBSD Foundation
  Differential Revision:        https://reviews.freebsd.org/D16515

Changes:
  head/sys/kern/uipc_sockbuf.c
  head/sys/kern/uipc_usrreq.c
  head/sys/sys/sockbuf.h

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the freebsd-net mailing list