]> git.ipfire.org Git - thirdparty/squid.git/commit
Do not make bogus recvmsg(2) calls when closing UDS sockets.
authorAlex Rousskov <rousskov@measurement-factory.com>
Wed, 15 Jun 2016 15:37:44 +0000 (09:37 -0600)
committerAlex Rousskov <rousskov@measurement-factory.com>
Wed, 15 Jun 2016 15:37:44 +0000 (09:37 -0600)
commite3c37fc292e0cb5f75809d732b878c8920c9a679
treefb9363e4f009503e887767038196dc9946c561fa
parent123d5c2aa22a37d9f6f0f84a97c390a37c0c1f04
Do not make bogus recvmsg(2) calls when closing UDS sockets.

comm_empty_os_read_buffers() assumes that all non-blocking
FD_READ_METHODs can read into an opaque buffer filled with random
characters. That assumption is wrong for UDS sockets that require an
initialized msghdr structure. Feeding random data to recvmsg(2) leads to
confusing errors, at best. Squid does not log those errors, but they
are visible in, for example, strace:

  recvmsg(17, 0x7fffbb, MSG_DONTWAIT) = -1 EMSGSIZE (Message too long)

comm_empty_os_read_buffers() is meant to prevent TCP RST packets. The
function now ignores UDS sockets that are not used for TCP.

TODO: Useless reads may also exist for UDP and some TCP sockets.
src/comm.cc