Commit e9c8dc8b authored by Alexey Klimov's avatar Alexey Klimov Committed by 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: default avatarAlexey Klimov <alexey.klimov@arm.com>
Acked-by: default avatarSudeep Holla <sudeep.holla@arm.com>
Acked-by: default avatarAshwin Chaugule <ashwin.chaugule@linaro.org>
Signed-off-by: default avatarJassi Brar <jaswinder.singh@linaro.org>
parent 34229b27
...@@ -81,16 +81,10 @@ static struct mbox_controller pcc_mbox_ctrl = {}; ...@@ -81,16 +81,10 @@ static struct mbox_controller pcc_mbox_ctrl = {};
*/ */
static struct mbox_chan *get_pcc_channel(int id) static struct mbox_chan *get_pcc_channel(int id)
{ {
struct mbox_chan *pcc_chan;
if (id < 0 || id > pcc_mbox_ctrl.num_chans) if (id < 0 || id > pcc_mbox_ctrl.num_chans)
return ERR_PTR(-ENOENT); return ERR_PTR(-ENOENT);
pcc_chan = (struct mbox_chan *) return &pcc_mbox_channels[id];
(unsigned long) pcc_mbox_channels +
(id * sizeof(*pcc_chan));
return pcc_chan;
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment