* [PATCH v2] thermal: core: Use strnlen in thermal_zone_device_register_with_trips
@ 2025-12-16 13:09 Thorsten Blum
2025-12-16 19:44 ` David Laight
2026-01-07 20:29 ` Rafael J. Wysocki
0 siblings, 2 replies; 3+ messages in thread
From: Thorsten Blum @ 2025-12-16 13:09 UTC (permalink / raw)
To: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba
Cc: Thorsten Blum, linux-pm, linux-kernel
Replace strlen() with the safer strnlen() and calculate the length of
the thermal zone name 'type' only once. No functional changes.
Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
---
Changes in v2:
- Format the code differently (Rafael)
- Link to v1: https://lore.kernel.org/lkml/20251215121633.375193-1-thorsten.blum@linux.dev/
---
drivers/thermal/thermal_core.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index 17ca5c082643..90e7edf16a52 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -1505,15 +1505,19 @@ thermal_zone_device_register_with_trips(const char *type,
const struct thermal_trip *trip = trips;
struct thermal_zone_device *tz;
struct thermal_trip_desc *td;
+ size_t type_len = 0;
int id;
int result;
- if (!type || strlen(type) == 0) {
+ if (type)
+ type_len = strnlen(type, THERMAL_NAME_LENGTH);
+
+ if (type_len == 0) {
pr_err("No thermal zone type defined\n");
return ERR_PTR(-EINVAL);
}
- if (strlen(type) >= THERMAL_NAME_LENGTH) {
+ if (type_len == THERMAL_NAME_LENGTH) {
pr_err("Thermal zone name (%s) too long, should be under %d chars\n",
type, THERMAL_NAME_LENGTH);
return ERR_PTR(-EINVAL);
--
Thorsten Blum <thorsten.blum@linux.dev>
GPG: 1D60 735E 8AEF 3BE4 73B6 9D84 7336 78FD 8DFE EAD4
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2] thermal: core: Use strnlen in thermal_zone_device_register_with_trips
2025-12-16 13:09 [PATCH v2] thermal: core: Use strnlen in thermal_zone_device_register_with_trips Thorsten Blum
@ 2025-12-16 19:44 ` David Laight
2026-01-07 20:29 ` Rafael J. Wysocki
1 sibling, 0 replies; 3+ messages in thread
From: David Laight @ 2025-12-16 19:44 UTC (permalink / raw)
To: Thorsten Blum
Cc: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba,
linux-pm, linux-kernel
On Tue, 16 Dec 2025 14:09:44 +0100
Thorsten Blum <thorsten.blum@linux.dev> wrote:
> Replace strlen() with the safer strnlen() and calculate the length of
> the thermal zone name 'type' only once. No functional changes.
>
> Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
> ---
> Changes in v2:
> - Format the code differently (Rafael)
> - Link to v1: https://lore.kernel.org/lkml/20251215121633.375193-1-thorsten.blum@linux.dev/
> ---
> drivers/thermal/thermal_core.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
> index 17ca5c082643..90e7edf16a52 100644
> --- a/drivers/thermal/thermal_core.c
> +++ b/drivers/thermal/thermal_core.c
> @@ -1505,15 +1505,19 @@ thermal_zone_device_register_with_trips(const char *type,
> const struct thermal_trip *trip = trips;
> struct thermal_zone_device *tz;
> struct thermal_trip_desc *td;
> + size_t type_len = 0;
> int id;
> int result;
>
> - if (!type || strlen(type) == 0) {
That one can just be:
if (!type || !type[0])
Although one might ask 'why bother'.
Pretty much all kernel code has to assume that the callers pass reasonably
sane data.
Sanity checks for things that are easy to get wrong are one thing,
but some of the checks in this function look pretty pointless.
> + if (type)
> + type_len = strnlen(type, THERMAL_NAME_LENGTH);
> +
> + if (type_len == 0) {
> pr_err("No thermal zone type defined\n");
> return ERR_PTR(-EINVAL);
> }
>
> - if (strlen(type) >= THERMAL_NAME_LENGTH) {
The code does want to check this - to stop the actual copy getting truncated
much later on - especially since at least on caller had to do an snprintf()
into a 'too long' buffer to stop gcc bleating.
But I'm not sure you need to worry about strlen() v strnlen().
(The kernel hardening people probably disagree...)
David
> + if (type_len == THERMAL_NAME_LENGTH) {
> pr_err("Thermal zone name (%s) too long, should be under %d chars\n",
> type, THERMAL_NAME_LENGTH);
> return ERR_PTR(-EINVAL);
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2] thermal: core: Use strnlen in thermal_zone_device_register_with_trips
2025-12-16 13:09 [PATCH v2] thermal: core: Use strnlen in thermal_zone_device_register_with_trips Thorsten Blum
2025-12-16 19:44 ` David Laight
@ 2026-01-07 20:29 ` Rafael J. Wysocki
1 sibling, 0 replies; 3+ messages in thread
From: Rafael J. Wysocki @ 2026-01-07 20:29 UTC (permalink / raw)
To: Thorsten Blum
Cc: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba,
linux-pm, linux-kernel
On Tue, Dec 16, 2025 at 2:10 PM Thorsten Blum <thorsten.blum@linux.dev> wrote:
>
> Replace strlen() with the safer strnlen() and calculate the length of
> the thermal zone name 'type' only once. No functional changes.
>
> Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
> ---
> Changes in v2:
> - Format the code differently (Rafael)
> - Link to v1: https://lore.kernel.org/lkml/20251215121633.375193-1-thorsten.blum@linux.dev/
> ---
> drivers/thermal/thermal_core.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
> index 17ca5c082643..90e7edf16a52 100644
> --- a/drivers/thermal/thermal_core.c
> +++ b/drivers/thermal/thermal_core.c
> @@ -1505,15 +1505,19 @@ thermal_zone_device_register_with_trips(const char *type,
> const struct thermal_trip *trip = trips;
> struct thermal_zone_device *tz;
> struct thermal_trip_desc *td;
> + size_t type_len = 0;
> int id;
> int result;
>
> - if (!type || strlen(type) == 0) {
> + if (type)
> + type_len = strnlen(type, THERMAL_NAME_LENGTH);
> +
> + if (type_len == 0) {
> pr_err("No thermal zone type defined\n");
> return ERR_PTR(-EINVAL);
> }
>
> - if (strlen(type) >= THERMAL_NAME_LENGTH) {
> + if (type_len == THERMAL_NAME_LENGTH) {
> pr_err("Thermal zone name (%s) too long, should be under %d chars\n",
> type, THERMAL_NAME_LENGTH);
> return ERR_PTR(-EINVAL);
> --
Applied as 6.20 material, thanks!
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-01-07 20:29 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-16 13:09 [PATCH v2] thermal: core: Use strnlen in thermal_zone_device_register_with_trips Thorsten Blum
2025-12-16 19:44 ` David Laight
2026-01-07 20:29 ` Rafael J. Wysocki
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox