public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
* [PATCH] firmware: arm_scmi: Relax BASE protocol sanity checks on protocol list
@ 2022-05-23 17:15 Cristian Marussi
  2022-05-31 14:59 ` Etienne Carriere
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Cristian Marussi @ 2022-05-23 17:15 UTC (permalink / raw)
  To: linux-arm-kernel, linux-rockchip, linux-kernel
  Cc: Heiko Stuebner, Liang Chen, Kever Yang, Jeffy Chen, Peter Geis,
	Cristian Marussi, Nicolas Frattaroli, Etienne Carriere,
	Sudeep Holla

Even though malformed replies from firmware must be treated carefully to
avoid memory corruption Kernel side, some out-of-spec SCMI replies can
be tolerated to avoid breaking existing deployed system, as long as they
won't cause memory issues.

Reported-by: Nicolas Frattaroli <frattaroli.nicolas@gmail.com>
Cc: Etienne Carriere <etienne.carriere@linaro.org>
Cc: Sudeep Holla <sudeep.holla@arm.com>
Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
---
 drivers/firmware/arm_scmi/base.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/drivers/firmware/arm_scmi/base.c b/drivers/firmware/arm_scmi/base.c
index 20fba7370f4e..d0ac96da1ddf 100644
--- a/drivers/firmware/arm_scmi/base.c
+++ b/drivers/firmware/arm_scmi/base.c
@@ -221,11 +221,17 @@ scmi_base_implementation_list_get(const struct scmi_protocol_handle *ph,
 		calc_list_sz = (1 + (loop_num_ret - 1) / sizeof(u32)) *
 				sizeof(u32);
 		if (calc_list_sz != real_list_sz) {
-			dev_err(dev,
-				"Malformed reply - real_sz:%zd  calc_sz:%u\n",
-				real_list_sz, calc_list_sz);
-			ret = -EPROTO;
-			break;
+			dev_warn(dev,
+				 "Malformed reply - real_sz:%zd  calc_sz:%u  (loop_num_ret:%d)\n",
+				 real_list_sz, calc_list_sz, loop_num_ret);
+			/*
+			 * Bail out if the expected list size is bigger than the
+			 * total payload size of the received reply.
+			 */
+			if (calc_list_sz > real_list_sz) {
+				ret = -EPROTO;
+				break;
+			}
 		}
 
 		for (loop = 0; loop < loop_num_ret; loop++)
-- 
2.36.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-06-06 15:12 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-05-23 17:15 [PATCH] firmware: arm_scmi: Relax BASE protocol sanity checks on protocol list Cristian Marussi
2022-05-31 14:59 ` Etienne Carriere
2022-06-06 12:59 ` Michael Riesch
2022-06-06 13:31   ` Cristian Marussi
2022-06-06 14:43     ` Sudeep Holla
2022-06-06 14:55       ` Heiko Stübner
2022-06-06 15:10         ` Sudeep Holla
2022-06-06 14:03   ` Aw: " Frank Wunderlich
2022-06-06 14:51 ` Sudeep Holla

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox