From: Amit Kumar Mahapatra <amit.kumar-mahapatra@amd.com>
To: "Jonathan Cameron" <jic23@kernel.org>,
"Michal Simek" <michal.simek@amd.com>,
"Sai Krishna Potthuri" <sai.krishna.potthuri@amd.com>,
"David Lechner" <dlechner@baylibre.com>,
"Nuno Sá" <nuno.sa@analog.com>,
"Andy Shevchenko" <andy@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>
Cc: <linux-iio@vger.kernel.org>, <devicetree@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, <amitrkcian2002@gmail.com>,
Amit Kumar Mahapatra <amit.kumar-mahapatra@amd.com>
Subject: [PATCH 2/6] iio: adc: versal-sysmon: validate temperature hysteresis
Date: Mon, 2 Nov 2026 17:51:08 +0530 [thread overview]
Message-ID: <20261102122112.1723130-3-amit.kumar-mahapatra@amd.com> (raw)
In-Reply-To: <20261102122112.1723130-1-amit.kumar-mahapatra@amd.com>
The hysteresis written through sysfs is only checked for being negative.
A large value makes upper_mc - hysteresis in sysmon_update_temp_lower()
overflow before it is clamped. Reject values above the full Q8.7 span of
511992 millicelsius, and name the Q8.7 temperature limits so that the
span and the existing range checks share one definition.
The cached hysteresis is seeded at probe from the threshold registers
without checking that the lower threshold is not above the upper one.
Treat that case as zero hysteresis, as negative values are rejected on
the write path.
Fixes: c7f7eb10638f ("iio: adc: versal-sysmon: add threshold event support")
Signed-off-by: Amit Kumar Mahapatra <amit.kumar-mahapatra@amd.com>
---
drivers/iio/adc/versal-sysmon-core.c | 10 +++++-----
drivers/iio/adc/versal-sysmon.h | 4 ++++
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/drivers/iio/adc/versal-sysmon-core.c b/drivers/iio/adc/versal-sysmon-core.c
index 6b9a58e19831..6595d07038c1 100644
--- a/drivers/iio/adc/versal-sysmon-core.c
+++ b/drivers/iio/adc/versal-sysmon-core.c
@@ -352,7 +352,8 @@ static int sysmon_update_temp_lower(struct sysmon *sysmon)
return ret;
sysmon_q8p7_to_millicelsius(upper_reg, &upper_mc);
- lower_mc = clamp(upper_mc - sysmon->temp_hysteresis, -256000, 255992);
+ lower_mc = clamp(upper_mc - sysmon->temp_hysteresis,
+ SYSMON_TEMP_MIN_MC, SYSMON_TEMP_MAX_MC);
sysmon_millicelsius_to_q8p7(&raw_val, lower_mc);
return regmap_write(sysmon->regmap, SYSMON_TEMP_TH_LOW, raw_val);
@@ -429,8 +430,7 @@ static int sysmon_write_event_value(struct iio_dev *indio_dev,
case IIO_TEMP:
switch (info) {
case IIO_EV_INFO_VALUE:
- /* Q8.7 signed range: -256000 to +255992 mC */
- if (val < -256000 || val > 255992)
+ if (val < SYSMON_TEMP_MIN_MC || val > SYSMON_TEMP_MAX_MC)
return -EINVAL;
sysmon_millicelsius_to_q8p7(&raw_val, val);
@@ -443,7 +443,7 @@ static int sysmon_write_event_value(struct iio_dev *indio_dev,
return sysmon_update_temp_lower(sysmon);
case IIO_EV_INFO_HYSTERESIS:
- if (val < 0)
+ if (val < 0 || val > SYSMON_TEMP_MAX_MC - SYSMON_TEMP_MIN_MC)
return -EINVAL;
sysmon->temp_hysteresis = val;
@@ -838,7 +838,7 @@ static int sysmon_init_hysteresis(struct sysmon *sysmon, int *hysteresis)
sysmon_q8p7_to_millicelsius(upper_reg, &upper_mc);
sysmon_q8p7_to_millicelsius(lower_reg, &lower_mc);
- *hysteresis = upper_mc - lower_mc;
+ *hysteresis = max(upper_mc - lower_mc, 0);
return 0;
}
diff --git a/drivers/iio/adc/versal-sysmon.h b/drivers/iio/adc/versal-sysmon.h
index 701ef9b56263..a1ac3289719c 100644
--- a/drivers/iio/adc/versal-sysmon.h
+++ b/drivers/iio/adc/versal-sysmon.h
@@ -75,6 +75,10 @@ struct regmap;
#define SYSMON_FRACTIONAL_SHIFT 7U
#define SYSMON_SUPPLY_MANTISSA_BITS 16
+/* Q8.7 signed temperature range in millicelsius */
+#define SYSMON_TEMP_MIN_MC -256000
+#define SYSMON_TEMP_MAX_MC 255992
+
/* Bits per alarm register */
#define SYSMON_ALARM_BITS_PER_REG 32
--
2.34.1
next prev parent reply other threads:[~2026-11-02 12:21 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-02 12:21 [PATCH 0/6] iio: adc: versal-sysmon: Add OT alarm, shutdown and thermal zone support Amit Kumar Mahapatra
2026-11-02 12:21 ` [PATCH 1/6] iio: adc: versal-sysmon: fix race in interrupt teardown Amit Kumar Mahapatra
2026-11-02 12:21 ` Amit Kumar Mahapatra [this message]
2026-11-02 12:21 ` [PATCH 3/6] iio: adc: versal-sysmon: disable interrupts on shutdown Amit Kumar Mahapatra
2026-11-02 12:21 ` [PATCH 4/6] iio: adc: versal-sysmon: add over-temperature alarm events Amit Kumar Mahapatra
2026-11-02 12:21 ` [PATCH 5/6] arm64: versal-net: Add SysMon and thermal zone Amit Kumar Mahapatra
2026-11-02 14:53 ` Michal Simek
2026-11-02 12:21 ` [PATCH 6/6] MAINTAINERS: update Versal SysMon maintainers Amit Kumar Mahapatra
2026-11-02 12:53 ` Michal Simek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261102122112.1723130-3-amit.kumar-mahapatra@amd.com \
--to=amit.kumar-mahapatra@amd.com \
--cc=amitrkcian2002@gmail.com \
--cc=andy@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dlechner@baylibre.com \
--cc=jic23@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=michal.simek@amd.com \
--cc=nuno.sa@analog.com \
--cc=robh@kernel.org \
--cc=sai.krishna.potthuri@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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®