DF-5733 / fix.diff
--- a/sys/netbt/rfcomm_session.c +++ b/sys/netbt/rfcomm_session.c @@ -1371,7 +1371,13 @@ callout_stop(&dlc->rd_timeout); - if (pn.mtu > RFCOMM_MTU_MAX || pn.mtu > dlc->rd_mtu) { + /* + * reject invalid or unacceptable MTU. The lower bound is + * mandatory: rd_mtu == 0 reaches a divide-by-zero in + * rfcomm_dlc_start() (rd_rxsize / rd_mtu). + */ + if (pn.mtu < RFCOMM_MTU_MIN || + pn.mtu > RFCOMM_MTU_MAX || pn.mtu > dlc->rd_mtu) { dlc->rd_state = RFCOMM_DLC_WAIT_DISCONNECT; err = rfcomm_session_send_frame(rs, RFCOMM_FRAME_DISC, pn.dlci); |