projects
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
ad78b81
)
firmware: arm_scmi: Harden shared memory access in fetch_notification
author
Cristian Marussi
<cristian.marussi@arm.com>
Thu, 22 Dec 2022 18:38:21 +0000
(18:38 +0000)
committer
Sudeep Holla
<sudeep.holla@arm.com>
Tue, 3 Jan 2023 16:50:30 +0000
(16:50 +0000)
A misbheaving SCMI platform firmware could reply with out-of-spec
notifications, shorter than the mimimum size comprising a header.
Fixes: d5141f37c42e ("firmware: arm_scmi: Add notifications support in transport layer")
Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
Link:
https://lore.kernel.org/r/20221222183823.518856-4-cristian.marussi@arm.com
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
drivers/firmware/arm_scmi/shmem.c
patch
|
blob
|
history
diff --git
a/drivers/firmware/arm_scmi/shmem.c
b/drivers/firmware/arm_scmi/shmem.c
index 135f8718000f593148fd3294f7ccd445bc671ae7..87b4f4d35f06230bc161fc4205c7b199e03c0015 100644
(file)
--- a/
drivers/firmware/arm_scmi/shmem.c
+++ b/
drivers/firmware/arm_scmi/shmem.c
@@
-94,8
+94,10
@@
void shmem_fetch_response(struct scmi_shared_mem __iomem *shmem,
void shmem_fetch_notification(struct scmi_shared_mem __iomem *shmem,
size_t max_len, struct scmi_xfer *xfer)
{
+ size_t len = ioread32(&shmem->length);
+
/* Skip only the length of header in shmem area i.e 4 bytes */
- xfer->rx.len = min_t(size_t, max_len,
ioread32(&shmem->length) - 4
);
+ xfer->rx.len = min_t(size_t, max_len,
len > 4 ? len - 4 : 0
);
/* Take a copy to the rx buffer.. */
memcpy_fromio(xfer->rx.buf, shmem->msg_payload, xfer->rx.len);