diff options
author | Michael Tuexen <tuexen@FreeBSD.org> | 2019-07-31 21:29:17 +0000 |
---|---|---|
committer | Michael Tuexen <tuexen@FreeBSD.org> | 2019-07-31 21:29:17 +0000 |
commit | 30735183aa7963f98913d8e9ca8df5ebc3d2ddc4 (patch) | |
tree | ccec18653b6e11e0d48a40398c5df5e48fa78ab5 /sys/netinet | |
parent | 2b299dcf0e4ec3cb9d664bd4e74ceb0d50a9dc07 (diff) | |
download | src-30735183aa7963f98913d8e9ca8df5ebc3d2ddc4.tar.gz src-30735183aa7963f98913d8e9ca8df5ebc3d2ddc4.zip |
Consistently cleanup mbufs in case of other memory errors.
MFC after: 3 days
Notes
Notes:
svn path=/head/; revision=350487
Diffstat (limited to 'sys/netinet')
-rw-r--r-- | sys/netinet/sctp_output.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/sys/netinet/sctp_output.c b/sys/netinet/sctp_output.c index 7a1575d0216f..3e720c906b2d 100644 --- a/sys/netinet/sctp_output.c +++ b/sys/netinet/sctp_output.c @@ -5586,8 +5586,7 @@ do_a_abort: m = sctp_get_mbuf_for_msg(MCLBYTES, 0, M_NOWAIT, 1, MT_DATA); if (m == NULL) { /* No memory, INIT timer will re-attempt. */ - if (op_err) - sctp_m_freem(op_err); + sctp_m_freem(op_err); return; } chunk_len = (uint16_t)sizeof(struct sctp_init_ack_chunk); @@ -5776,8 +5775,11 @@ do_a_abort: net->ro._s_addr = sctp_source_address_selection(inp, stcb, (sctp_route_t *)&net->ro, net, 0, vrf_id); - if (net->ro._s_addr == NULL) + if (net->ro._s_addr == NULL) { + sctp_m_freem(op_err); + sctp_m_freem(m); return; + } net->src_addr_selected = 1; @@ -5806,8 +5808,11 @@ do_a_abort: net->ro._s_addr = sctp_source_address_selection(inp, stcb, (sctp_route_t *)&net->ro, net, 0, vrf_id); - if (net->ro._s_addr == NULL) + if (net->ro._s_addr == NULL) { + sctp_m_freem(op_err); + sctp_m_freem(m); return; + } net->src_addr_selected = 1; } @@ -5878,6 +5883,7 @@ do_a_abort: so = inp->sctp_socket; if (so == NULL) { /* memory problem */ + sctp_m_freem(op_err); sctp_m_freem(m); return; } else { |