In sctp_sf_do_asconf(), SCTP_DISPOSITION_NOMEM error code returned from sctp_sf_heartbeat() represent a failure of sent HEARTBEAT. The return value of sctp_sf_heartbeat() needs to be checked and propagates to caller function. Signed-off-by: Wentao Liang <vulab@xxxxxxxxxxx> --- net/sctp/sm_statefuns.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c index a0524ba8d787..89100546670a 100644 --- a/net/sctp/sm_statefuns.c +++ b/net/sctp/sm_statefuns.c @@ -3973,8 +3973,10 @@ enum sctp_disposition sctp_sf_do_asconf(struct net *net, asconf_ack->dest = chunk->source; sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(asconf_ack)); if (asoc->new_transport) { - sctp_sf_heartbeat(ep, asoc, type, asoc->new_transport, commands); - ((struct sctp_association *)asoc)->new_transport = NULL; + if (SCTP_DISPOSITION_NOMEM == sctp_sf_heartbeat(ep, asoc, type, asoc->new_transport, commands)) { + ((struct sctp_association *)asoc)->new_transport = NULL; + return SCTP_DISPOSITION_NOMEM; + } } return SCTP_DISPOSITION_CONSUME; -- 2.42.0.windows.2