mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] platform: arm64: qcom-hamoa-ec: reject incomplete responses
@ 2026-07-28 11:19 Linmao Li
  2026-07-28 11:25 ` Bryan O'Donoghue
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Linmao Li @ 2026-07-28 11:19 UTC (permalink / raw)
  To: Anvesh Jain P, Sibi Sankar
  Cc: Hans de Goede, Ilpo Järvinen, Bryan O'Donoghue,
	Maya Matuszczyk, Dmitry Baryshkov, Konrad Dybcio, linux-arm-msm,
	platform-driver-x86, linux-kernel, Linmao Li

qcom_ec_read() accepts short positive transfers, while both callers
unconditionally consume every field in their fixed-size response. A short
transfer can therefore make them use trailing stack bytes that were not
returned by the device.

The first response byte contains the number of payload bytes, excluding
the byte count itself. A complete response of resp_len bytes must
therefore report resp_len - 1 payload bytes. The existing check only
rejects counts that do not fit in the response buffer and still accepts
an incomplete payload.

Require both the SMBus transfer length and the EC-provided payload count
to match the expected response size.

Fixes: 5c44f48e91de ("platform: arm64: Add driver for EC found on Qualcomm reference devices")
Signed-off-by: Linmao Li <lilinmao@kylinos.cn>
---
The resp_len - 1 requirement is based solely on the response layouts
documented in this driver. The EC specification and hardware were not
available, so please confirm it for supported firmware revisions.

Compile-tested with CONFIG_EC_QCOM_HAMOA=m.

 drivers/platform/arm64/qcom-hamoa-ec.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/platform/arm64/qcom-hamoa-ec.c b/drivers/platform/arm64/qcom-hamoa-ec.c
index 5ca7308c6077..4d2ad042a7f8 100644
--- a/drivers/platform/arm64/qcom-hamoa-ec.c
+++ b/drivers/platform/arm64/qcom-hamoa-ec.c
@@ -92,8 +92,10 @@ static int qcom_ec_read(struct qcom_ec *ec, u8 cmd, u8 resp_len, u8 *resp)
 		return ret;
 	else if (ret == 0 || ret == 0xff)
 		return -EOPNOTSUPP;
+	else if (ret != resp_len)
+		return -EIO;
 
-	if (resp[0] >= resp_len)
+	if (resp[0] != resp_len - 1)
 		return -EINVAL;
 
 	return 0;

base-commit: c5e32e86ca02b003f86e095d379b38148999293d
-- 
2.25.1


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

end of thread, other threads:[~2026-08-03 19:12 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-07-28 11:19 [PATCH] platform: arm64: qcom-hamoa-ec: reject incomplete responses Linmao Li
2026-07-28 11:25 ` Bryan O'Donoghue
2026-07-29 10:08 ` Anvesh Jain P
2026-07-29 10:23   ` Bryan O'Donoghue
2026-07-29 10:49     ` Anvesh Jain P
2026-08-03 19:12 ` Ilpo Järvinen

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

all inboxes | Powered by JetHome®