aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet/ip_divert.c
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2021-07-28 15:46:59 +0000
committerKevin Bowling <kbowling@FreeBSD.org>2021-07-28 16:35:09 +0000
commit7045b1603bdf054145dd958a4acc17b410fb62a0 (patch)
tree9802ca364b6612648e33425e92b0f53f40799308 /sys/netinet/ip_divert.c
parent33ff39796ffe469a764e485ac49c31700a51fd6f (diff)
downloadsrc-7045b1603bdf054145dd958a4acc17b410fb62a0.tar.gz
src-7045b1603bdf054145dd958a4acc17b410fb62a0.zip
socket: Implement SO_RERROR
SO_RERROR indicates that receive buffer overflows should be handled as errors. Historically receive buffer overflows have been ignored and programs could not tell if they missed messages or messages had been truncated because of overflows. Since programs historically do not expect to get receive overflow errors, this behavior is not the default. This is really really important for programs that use route(4) to keep in sync with the system. If we loose a message then we need to reload the full system state, otherwise the behaviour from that point is undefined and can lead to chasing bogus bug reports. Reviewed by: philip (network), kbowling (transport), gbe (manpages) MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D26652
Diffstat (limited to 'sys/netinet/ip_divert.c')
-rw-r--r--sys/netinet/ip_divert.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/netinet/ip_divert.c b/sys/netinet/ip_divert.c
index 77a4bfcd08ac..4141386a6a2d 100644
--- a/sys/netinet/ip_divert.c
+++ b/sys/netinet/ip_divert.c
@@ -295,7 +295,7 @@ divert_packet(struct mbuf *m, bool incoming)
if (sbappendaddr_locked(&sa->so_rcv,
(struct sockaddr *)&divsrc, m,
(struct mbuf *)0) == 0) {
- SOCKBUF_UNLOCK(&sa->so_rcv);
+ soroverflow_locked(sa);
sa = NULL; /* force mbuf reclaim below */
} else
sorwakeup_locked(sa);