提交 e9c8dc8b 编写于 作者: A Alexey Klimov 提交者: Jassi Brar

mailbox: pcc: fix channel calculation in get_pcc_channel()

This patch fixes the calculation of pcc_chan for non-zero id.
After the compiler ignores the (unsigned long) cast the
pcc_mbox_channels pointer is type-cast and then the type-cast
offset is added which results in address outside of the range
leading to the kernel crashing.

We might add braces and make it:

pcc_chan = (struct mbox_chan *)
		((unsigned long) pcc_mbox_channels +
		(id * sizeof(*pcc_chan)));

but let's go with array approach here and use id as index.

Tested on Juno board.
Signed-off-by: NAlexey Klimov <alexey.klimov@arm.com>
Acked-by: NSudeep Holla <sudeep.holla@arm.com>
Acked-by: NAshwin Chaugule <ashwin.chaugule@linaro.org>
Signed-off-by: NJassi Brar <jaswinder.singh@linaro.org>
上级 34229b27
......@@ -81,16 +81,10 @@ static struct mbox_controller pcc_mbox_ctrl = {};
*/
static struct mbox_chan *get_pcc_channel(int id)
{
struct mbox_chan *pcc_chan;
if (id < 0 || id > pcc_mbox_ctrl.num_chans)
return ERR_PTR(-ENOENT);
pcc_chan = (struct mbox_chan *)
(unsigned long) pcc_mbox_channels +
(id * sizeof(*pcc_chan));
return pcc_chan;
return &pcc_mbox_channels[id];
}
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册