bus: mhi: core: Validate channel ID when processing command completions
Subsystems (2)
PATCH 1/1 bus: mhi: core: Validate channel ID when processing command completions
MHI reads the channel ID from the event ring element sent by the device which can be any value between 0 and 255. In order to prevent any out of bound accesses, add a check against the maximum number of channels supported by the controller and those channels not configured yet so as to skip processing of that event ring element.
--- drivers/bus/mhi/core/main.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
drivers/bus/mhi/core/main.c +10 -5
@@ -773,11 +773,16 @@ static void mhi_process_cmd_completion(struct mhi_controller *mhi_cntrl, cmd_pkt =mhi_to_virtual (mhi_ring, ptr); chan =MHI_TRE_GET_CMD_CHID (cmd_pkt); - mhi_chan = &mhi_cntrl->mhi_chan[chan]; -write_lock_bh (&mhi_chan->lock); - mhi_chan->ccs =MHI_TRE_GET_EV_CODE (tre); -complete (&mhi_chan->completion); -write_unlock_bh (&mhi_chan->lock); +WARN_ON (chan >= mhi_cntrl->max_chan); + +if (chan < mhi_cntrl->max_chan && + mhi_cntrl->mhi_chan[chan].configured) { + mhi_chan = &mhi_cntrl->mhi_chan[chan]; +write_lock_bh (&mhi_chan->lock); + mhi_chan->ccs =MHI_TRE_GET_EV_CODE (tre); +complete (&mhi_chan->completion); +write_unlock_bh (&mhi_chan->lock); + }mhi_del_ring_element (mhi_cntrl, mhi_ring); }
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Quoted 10 lines · Bhaumik Bhatt
MHI reads the channel ID from the event ring element sent by the device which can be any value between 0 and 255. In order to prevent any out of bound accesses, add a check against the maximum number of channels supported by the controller and those channels not configured yet so as to skip processing of that event ring element.
Fixes 1d3173a3bae7 ("bus: mhi: core: Add support for processing events from client device")Signed-off-by Bhaumik Bhatt <[email protected]>---
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Quoted 10 lines · Bhaumik Bhatt
MHI reads the channel ID from the event ring element sent by the device which can be any value between 0 and 255. In order to prevent any out of bound accesses, add a check against the maximum number of channels supported by the controller and those channels not configured yet so as to skip processing of that event ring element.
Fixes 1d3173a3bae7 ("bus: mhi: core: Add support for processing events from client device")Signed-off-by Bhaumik Bhatt <[email protected]>---
Quoted 9 lines · Bhaumik Bhatt
MHI reads the channel ID from the event ring element sent by the device which can be any value between 0 and 255. In order to prevent any out of bound accesses, add a check against the maximum number of channels supported by the controller and those channels not configured yet so as to skip processing of that event ring element.
Fixes 1d3173a3bae7 ("bus: mhi: core: Add support for processing events from client device")Signed-off-by Bhaumik Bhatt <[email protected]>
Thanks,
Mani
Quoted 34 lines
--- drivers/bus/mhi/core/main.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)drivers/bus/mhi/core/main.c +10
-5@@ -773,11 +773,16 @@ static void mhi_process_cmd_completion(struct mhi_controller *mhi_cntrl, cmd_pkt =mhi_to_virtual (mhi_ring, ptr); chan =MHI_TRE_GET_CMD_CHID (cmd_pkt); - mhi_chan = &mhi_cntrl->mhi_chan[chan]; -write_lock_bh (&mhi_chan->lock); - mhi_chan->ccs =MHI_TRE_GET_EV_CODE (tre); -complete (&mhi_chan->completion); -write_unlock_bh (&mhi_chan->lock); +WARN_ON (chan >= mhi_cntrl->max_chan); + +if (chan < mhi_cntrl->max_chan && + mhi_cntrl->mhi_chan[chan].configured) { + mhi_chan = &mhi_cntrl->mhi_chan[chan]; +write_lock_bh (&mhi_chan->lock); + mhi_chan->ccs =MHI_TRE_GET_EV_CODE (tre); +complete (&mhi_chan->completion); +write_unlock_bh (&mhi_chan->lock); + }mhi_del_ring_element (mhi_cntrl, mhi_ring); }Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Manivannan Sadhasivam
AppliedQuoted 9 lines · Bhaumik Bhatt
MHI reads the channel ID from the event ring element sent by the device which can be any value between 0 and 255. In order to prevent any out of bound accesses, add a check against the maximum number of channels supported by the controller and those channels not configured yet so as to skip processing of that event ring element.
Fixes 1d3173a3bae7 ("bus: mhi: core: Add support for processing events from client device")Signed-off-by Bhaumik Bhatt <[email protected]>
Applied to mhi-next!
Thanks,
Mani
Quoted 34 lines
--- drivers/bus/mhi/core/main.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)drivers/bus/mhi/core/main.c +10
-5@@ -773,11 +773,16 @@ static void mhi_process_cmd_completion(struct mhi_controller *mhi_cntrl, cmd_pkt =mhi_to_virtual (mhi_ring, ptr); chan =MHI_TRE_GET_CMD_CHID (cmd_pkt); - mhi_chan = &mhi_cntrl->mhi_chan[chan]; -write_lock_bh (&mhi_chan->lock); - mhi_chan->ccs =MHI_TRE_GET_EV_CODE (tre); -complete (&mhi_chan->completion); -write_unlock_bh (&mhi_chan->lock); +WARN_ON (chan >= mhi_cntrl->max_chan); + +if (chan < mhi_cntrl->max_chan && + mhi_cntrl->mhi_chan[chan].configured) { + mhi_chan = &mhi_cntrl->mhi_chan[chan]; +write_lock_bh (&mhi_chan->lock); + mhi_chan->ccs =MHI_TRE_GET_EV_CODE (tre); +complete (&mhi_chan->completion); +write_unlock_bh (&mhi_chan->lock); + }mhi_del_ring_element (mhi_cntrl, mhi_ring); }Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Quoted 8 lines · Manivannan Sadhasivam
Quoted 7 lines · Bhaumik Bhatt
MHI reads the channel ID from the event ring element sent by the device which can be any value between 0 and 255. In order to prevent any out of bound accesses, add a check against the maximum number of channels supported by the controller and those channels not configured yet so as to skip processing of that event ring element.
Quoted 5 lines
Quoted 2 lines
Fixes 1d3173a3bae7 ("bus: mhi: core: Add support for processing events from client device")Signed-off-by Bhaumik Bhatt <[email protected]>Applied to mhi-next!
Sorry this has been applied to mhi-next!
Thanks,
Mani
Quoted 37 lines
Thanks,
ManiQuoted 34 lines
--- drivers/bus/mhi/core/main.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)drivers/bus/mhi/core/main.c +10
-5@@ -773,11 +773,16 @@ static void mhi_process_cmd_completion(struct mhi_controller *mhi_cntrl, cmd_pkt =mhi_to_virtual (mhi_ring, ptr); chan =MHI_TRE_GET_CMD_CHID (cmd_pkt); - mhi_chan = &mhi_cntrl->mhi_chan[chan]; -write_lock_bh (&mhi_chan->lock); - mhi_chan->ccs =MHI_TRE_GET_EV_CODE (tre); -complete (&mhi_chan->completion); -write_unlock_bh (&mhi_chan->lock); +WARN_ON (chan >= mhi_cntrl->max_chan); + +if (chan < mhi_cntrl->max_chan && + mhi_cntrl->mhi_chan[chan].configured) { + mhi_chan = &mhi_cntrl->mhi_chan[chan]; +write_lock_bh (&mhi_chan->lock); + mhi_chan->ccs =MHI_TRE_GET_EV_CODE (tre); +complete (&mhi_chan->completion); +write_unlock_bh (&mhi_chan->lock); + }mhi_del_ring_element (mhi_cntrl, mhi_ring); }Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project