* [PATCH v3] hwmon: refactor deprecated strncpy
@ 2023-09-21 5:41 Justin Stitt
2023-09-24 3:18 ` Kees Cook
2023-09-27 12:48 ` Guenter Roeck
0 siblings, 2 replies; 5+ messages in thread
From: Justin Stitt @ 2023-09-21 5:41 UTC (permalink / raw)
To: Jean Delvare, Guenter Roeck
Cc: linux-hwmon, linux-kernel, linux-hardening, Justin Stitt
`strncpy` is deprecated for use on NUL-terminated destination strings [1].
Let's refactor this kcalloc() + strncpy() into a kmemdup_nul() which has
more obvious behavior and is less error prone.
To avoid truncating the last byte supply `...length + 1` to
kmemdup_nul() as `element->string.length` does not account for the
trailing null as made obvious from it's definition (and associated
comment):
| u32 length; /* # of bytes in string, excluding trailing null */
... this is precisely what the original kcalloc invocation did as well.
Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings [1]
Link: https://github.com/KSPP/linux/issues/90
Cc: linux-hardening@vger.kernel.org
Signed-off-by: Justin Stitt <justinstitt@google.com>
---
Changes in v3:
- refactor to use kmemdup_nul() (thanks Thomas and Kees)
- change commit msg to reflect ^
- rebase onto 2cf0f71562387282
- Link to v2: https://lore.kernel.org/r/20230919-strncpy-drivers-hwmon-acpi_power_meter-c-v2-1-8348432d6442@google.com
Changes in v2:
- use memcpy over strscpy (thanks Kees)
- Link to v1: https://lore.kernel.org/r/20230914-strncpy-drivers-hwmon-acpi_power_meter-c-v1-1-905297479fe8@google.com
---
drivers/hwmon/acpi_power_meter.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/hwmon/acpi_power_meter.c b/drivers/hwmon/acpi_power_meter.c
index fa28d447f0df..146c4f09c897 100644
--- a/drivers/hwmon/acpi_power_meter.c
+++ b/drivers/hwmon/acpi_power_meter.c
@@ -796,14 +796,13 @@ static int read_capabilities(struct acpi_power_meter_resource *resource)
goto error;
}
- *str = kcalloc(element->string.length + 1, sizeof(u8),
- GFP_KERNEL);
+ *str = kmemdup_nul(element->string.pointer, element->string.length + 1,
+ GFP_KERNEL);
if (!*str) {
res = -ENOMEM;
goto error;
}
- strncpy(*str, element->string.pointer, element->string.length);
str++;
}
---
base-commit: 2cf0f715623872823a72e451243bbf555d10d032
change-id: 20230914-strncpy-drivers-hwmon-acpi_power_meter-c-c9f2d8053bef
Best regards,
--
Justin Stitt <justinstitt@google.com>
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v3] hwmon: refactor deprecated strncpy
2023-09-21 5:41 [PATCH v3] hwmon: refactor deprecated strncpy Justin Stitt
@ 2023-09-24 3:18 ` Kees Cook
2023-09-27 12:48 ` Guenter Roeck
1 sibling, 0 replies; 5+ messages in thread
From: Kees Cook @ 2023-09-24 3:18 UTC (permalink / raw)
To: Justin Stitt
Cc: Jean Delvare, Guenter Roeck, linux-hwmon, linux-kernel,
linux-hardening
On Thu, Sep 21, 2023 at 05:41:46AM +0000, Justin Stitt wrote:
> `strncpy` is deprecated for use on NUL-terminated destination strings [1].
>
> Let's refactor this kcalloc() + strncpy() into a kmemdup_nul() which has
> more obvious behavior and is less error prone.
>
> To avoid truncating the last byte supply `...length + 1` to
> kmemdup_nul() as `element->string.length` does not account for the
> trailing null as made obvious from it's definition (and associated
> comment):
> | u32 length; /* # of bytes in string, excluding trailing null */
>
> ... this is precisely what the original kcalloc invocation did as well.
>
> Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings [1]
> Link: https://github.com/KSPP/linux/issues/90
> Cc: linux-hardening@vger.kernel.org
> Signed-off-by: Justin Stitt <justinstitt@google.com>
> ---
> Changes in v3:
> - refactor to use kmemdup_nul() (thanks Thomas and Kees)
> - change commit msg to reflect ^
> - rebase onto 2cf0f71562387282
> - Link to v2: https://lore.kernel.org/r/20230919-strncpy-drivers-hwmon-acpi_power_meter-c-v2-1-8348432d6442@google.com
>
> Changes in v2:
> - use memcpy over strscpy (thanks Kees)
> - Link to v1: https://lore.kernel.org/r/20230914-strncpy-drivers-hwmon-acpi_power_meter-c-v1-1-905297479fe8@google.com
> ---
> drivers/hwmon/acpi_power_meter.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/hwmon/acpi_power_meter.c b/drivers/hwmon/acpi_power_meter.c
> index fa28d447f0df..146c4f09c897 100644
> --- a/drivers/hwmon/acpi_power_meter.c
> +++ b/drivers/hwmon/acpi_power_meter.c
> @@ -796,14 +796,13 @@ static int read_capabilities(struct acpi_power_meter_resource *resource)
> goto error;
> }
>
> - *str = kcalloc(element->string.length + 1, sizeof(u8),
> - GFP_KERNEL);
> + *str = kmemdup_nul(element->string.pointer, element->string.length + 1,
> + GFP_KERNEL);
kmemdup_nul() already adds the "+ 1", so it's not needed here.
For v4, please improve the Subject along the lines of "...: Replace
open-coded kmemdup_nul"
-Kees
> if (!*str) {
> res = -ENOMEM;
> goto error;
> }
>
> - strncpy(*str, element->string.pointer, element->string.length);
> str++;
> }
>
>
> ---
> base-commit: 2cf0f715623872823a72e451243bbf555d10d032
> change-id: 20230914-strncpy-drivers-hwmon-acpi_power_meter-c-c9f2d8053bef
>
> Best regards,
> --
> Justin Stitt <justinstitt@google.com>
>
--
Kees Cook
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v3] hwmon: refactor deprecated strncpy
2023-09-21 5:41 [PATCH v3] hwmon: refactor deprecated strncpy Justin Stitt
2023-09-24 3:18 ` Kees Cook
@ 2023-09-27 12:48 ` Guenter Roeck
2023-09-27 14:05 ` Justin Stitt
1 sibling, 1 reply; 5+ messages in thread
From: Guenter Roeck @ 2023-09-27 12:48 UTC (permalink / raw)
To: Justin Stitt; +Cc: Jean Delvare, linux-hwmon, linux-kernel, linux-hardening
On Thu, Sep 21, 2023 at 05:41:46AM +0000, Justin Stitt wrote:
> `strncpy` is deprecated for use on NUL-terminated destination strings [1].
>
> Let's refactor this kcalloc() + strncpy() into a kmemdup_nul() which has
> more obvious behavior and is less error prone.
>
> To avoid truncating the last byte supply `...length + 1` to
> kmemdup_nul() as `element->string.length` does not account for the
> trailing null as made obvious from it's definition (and associated
> comment):
> | u32 length; /* # of bytes in string, excluding trailing null */
>
> ... this is precisely what the original kcalloc invocation did as well.
>
> Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings [1]
> Link: https://github.com/KSPP/linux/issues/90
> Cc: linux-hardening@vger.kernel.org
> Signed-off-by: Justin Stitt <justinstitt@google.com>
I have multiple patches with the hwmon: prefix but no driver,
like this one, suggesting the change is in the hwmon core,
when in reality it is in some hwmon driver.
I am not going to apply any of those, and I am not even going to
look into them.
Guenter
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v3] hwmon: refactor deprecated strncpy
2023-09-27 12:48 ` Guenter Roeck
@ 2023-09-27 14:05 ` Justin Stitt
2023-09-27 14:06 ` Justin Stitt
0 siblings, 1 reply; 5+ messages in thread
From: Justin Stitt @ 2023-09-27 14:05 UTC (permalink / raw)
To: Guenter Roeck; +Cc: Jean Delvare, linux-hwmon, linux-kernel, linux-hardening
On Wed, Sep 27, 2023 at 9:49 PM Guenter Roeck <linux@roeck-us.net> wrote:
>
> On Thu, Sep 21, 2023 at 05:41:46AM +0000, Justin Stitt wrote:
> > `strncpy` is deprecated for use on NUL-terminated destination strings [1].
> >
> > Let's refactor this kcalloc() + strncpy() into a kmemdup_nul() which has
> > more obvious behavior and is less error prone.
> >
> > To avoid truncating the last byte supply `...length + 1` to
> > kmemdup_nul() as `element->string.length` does not account for the
> > trailing null as made obvious from it's definition (and associated
> > comment):
> > | u32 length; /* # of bytes in string, excluding trailing null */
> >
> > ... this is precisely what the original kcalloc invocation did as well.
> >
> > Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings [1]
> > Link: https://github.com/KSPP/linux/issues/90
> > Cc: linux-hardening@vger.kernel.org
> > Signed-off-by: Justin Stitt <justinstitt@google.com>
>
> I have multiple patches with the hwmon: prefix but no driver,
> like this one, suggesting the change is in the hwmon core,
> when in reality it is in some hwmon driver.
> I am not going to apply any of those, and I am not even going to
> look into them.
Whoops, I was using some tooling to auto-fetch prefixes and the style
of "xyz: (stuff in paren)" isn't always caught.
I will resend with a fixed subject line matching the appropriate driver.
>
> Guenter
Thanks
Justin
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v3] hwmon: refactor deprecated strncpy
2023-09-27 14:05 ` Justin Stitt
@ 2023-09-27 14:06 ` Justin Stitt
0 siblings, 0 replies; 5+ messages in thread
From: Justin Stitt @ 2023-09-27 14:06 UTC (permalink / raw)
To: Guenter Roeck; +Cc: Jean Delvare, linux-hwmon, linux-kernel, linux-hardening
On Wed, Sep 27, 2023 at 11:05 PM Justin Stitt <justinstitt@google.com> wrote:
>
> On Wed, Sep 27, 2023 at 9:49 PM Guenter Roeck <linux@roeck-us.net> wrote:
> >
> > On Thu, Sep 21, 2023 at 05:41:46AM +0000, Justin Stitt wrote:
> > > `strncpy` is deprecated for use on NUL-terminated destination strings [1].
> > >
> > > Let's refactor this kcalloc() + strncpy() into a kmemdup_nul() which has
> > > more obvious behavior and is less error prone.
> > >
> > > To avoid truncating the last byte supply `...length + 1` to
> > > kmemdup_nul() as `element->string.length` does not account for the
> > > trailing null as made obvious from it's definition (and associated
> > > comment):
> > > | u32 length; /* # of bytes in string, excluding trailing null */
> > >
> > > ... this is precisely what the original kcalloc invocation did as well.
> > >
> > > Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings [1]
> > > Link: https://github.com/KSPP/linux/issues/90
> > > Cc: linux-hardening@vger.kernel.org
> > > Signed-off-by: Justin Stitt <justinstitt@google.com>
> >
> > I have multiple patches with the hwmon: prefix but no driver,
> > like this one, suggesting the change is in the hwmon core,
> > when in reality it is in some hwmon driver.
> > I am not going to apply any of those, and I am not even going to
> > look into them.
>
> Whoops, I was using some tooling to auto-fetch prefixes and the style
> of "xyz: (stuff in paren)" isn't always caught.
>
> I will resend with a fixed subject line matching the appropriate driver.
Erhm, In this case I seem to have caught the mistake over in [v5].
>
> >
> > Guenter
>
> Thanks
> Justin
[v5]: https://lore.kernel.org/all/20230926-strncpy-drivers-hwmon-acpi_power_meter-c-v5-1-3fc31a9daf99@google.com/
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-09-27 14:07 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-21 5:41 [PATCH v3] hwmon: refactor deprecated strncpy Justin Stitt
2023-09-24 3:18 ` Kees Cook
2023-09-27 12:48 ` Guenter Roeck
2023-09-27 14:05 ` Justin Stitt
2023-09-27 14:06 ` Justin Stitt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox