1
0
mirror of http://git.haproxy.org/git/haproxy.git/ synced 2025-04-07 01:31:35 +00:00

BUG/MEDIUM: mux-quic: fix crash on STOP_SENDING received without SD

Abort reason code received on STOP_SENDING is notified to upper layer
since the following commit :
  367ce1ebf3
  MINOR: mux-quic: Set tha SE abort reason when a STOP_SENDING frame is received

However, this causes a crash when a STOP_SENDING is received on a QCS
instance without any stream instantiated. Fix this by checking first if
qcs->sd is not NULL before setting abort code.

This bug can easily be reproduced by emitting a STOP_SENDING as first
frame of a stream.

This should fix github issue .

This does not need to be backported.
This commit is contained in:
Amaury Denoyelle 2024-05-10 10:42:07 +02:00
parent fbbc2925d4
commit cc9827bb09

View File

@ -1585,18 +1585,18 @@ int qcc_recv_stop_sending(struct qcc *qcc, uint64_t id, uint64_t err)
} }
} }
/* If FIN already reached, future RESET_STREAMS will be ignored. if (qcs_sc(qcs)) {
* Manually set EOS in this case. /* Manually set EOS if FIN already reached as futures RESET_STREAM will be ignored in this case. */
*/ if (se_fl_test(qcs->sd, SE_FL_EOI)) {
if (qcs_sc(qcs) && se_fl_test(qcs->sd, SE_FL_EOI)) { se_fl_set(qcs->sd, SE_FL_EOS);
se_fl_set(qcs->sd, SE_FL_EOS); qcs_alert(qcs);
qcs_alert(qcs); }
}
/* If not defined yet, set abort info for the sedesc */ /* If not defined yet, set abort info for the sedesc */
if (!qcs->sd->abort_info.info) { if (!qcs->sd->abort_info.info) {
qcs->sd->abort_info.info = (SE_ABRT_SRC_MUX_QUIC << SE_ABRT_SRC_SHIFT); qcs->sd->abort_info.info = (SE_ABRT_SRC_MUX_QUIC << SE_ABRT_SRC_SHIFT);
qcs->sd->abort_info.code = err; qcs->sd->abort_info.code = err;
}
} }
/* RFC 9000 3.5. Solicited State Transitions /* RFC 9000 3.5. Solicited State Transitions