diff --git a/drivers/bus/mhi/core/mhi_main.c b/drivers/bus/mhi/core/mhi_main.c index cd792cff0a4a..ee0b38aecf43 100644 --- a/drivers/bus/mhi/core/mhi_main.c +++ b/drivers/bus/mhi/core/mhi_main.c @@ -1160,6 +1160,10 @@ static void mhi_process_cmd_completion(struct mhi_controller *mhi_cntrl, complete(&mhi_tsync->completion); } else { chan = MHI_TRE_GET_CMD_CHID(cmd_pkt); + if (chan >= mhi_cntrl->max_chan) { + MHI_ERR("invalid channel id %u\n", chan); + goto del_ring_el; + } mhi_chan = &mhi_cntrl->mhi_chan[chan]; write_lock_bh(&mhi_chan->lock); mhi_chan->ccs = MHI_TRE_GET_EV_CODE(tre); @@ -1167,6 +1171,7 @@ static void mhi_process_cmd_completion(struct mhi_controller *mhi_cntrl, write_unlock_bh(&mhi_chan->lock); } +del_ring_el: mhi_del_ring_element(mhi_cntrl, mhi_ring); }