aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet
diff options
context:
space:
mode:
authorMichael Tuexen <tuexen@FreeBSD.org>2019-07-31 21:29:17 +0000
committerMichael Tuexen <tuexen@FreeBSD.org>2019-07-31 21:29:17 +0000
commit30735183aa7963f98913d8e9ca8df5ebc3d2ddc4 (patch)
treeccec18653b6e11e0d48a40398c5df5e48fa78ab5 /sys/netinet
parent2b299dcf0e4ec3cb9d664bd4e74ceb0d50a9dc07 (diff)
downloadsrc-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.c14
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 {