]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
divert: Fix mbuf ownership confusion in div_output()
authorMark Johnston <markj@FreeBSD.org>
Fri, 7 May 2021 18:27:58 +0000 (14:27 -0400)
committerMark Johnston <markj@FreeBSD.org>
Fri, 7 May 2021 18:31:08 +0000 (14:31 -0400)
commita1fadf7de25b973a308b86d04c4ada4fa8be193f
tree82bd5b5f78482cef9209ea31dc93c4228f454bc4
parent831850d8b0870c75c21d2e01527af1e55fe2fec8
divert: Fix mbuf ownership confusion in div_output()

div_output_outbound() and div_output_inbound() relied on the caller to
free the mbuf if an error occurred.  However, this is contrary to the
semantics of their callees, ip_output(), ip6_output() and
netisr_queue_src(), which always consume the mbuf.  So, if one of these
functions returned an error, that would get propagated up to
div_output(), resulting in a double free.

Fix the problem by making div_output_outbound() and div_output_inbound()
responsible for freeing the mbuf in all cases.

Reported by: Michael Schmiedgen <schmiedgen@gmx.net>
Tested by: Michael Schmiedgen
Reviewed by: donner
MFC after: 3 days
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D30129
sys/netinet/ip_divert.c