2022-12-05 12:26:24

by Yang Yang

[permalink] [raw]
Subject: [PATCH linux-next v2] x86/platform/uv: use strscpy to instead of strncpy()

From: Xu Panda <[email protected]>

The implementation of strscpy() is more robust and safer.
That's now the recommended way to copy NUL terminated strings.
---
change for v2
- fix the mistake and make the code better and simpler,
thanks to Andy Shevchenko.
---

Signed-off-by: Xu Panda <[email protected]>
Signed-off-by: Yang Yang <[email protected]>
Signed-off-by: Andy Shevchenko <[email protected]>
---
arch/x86/platform/uv/uv_nmi.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/arch/x86/platform/uv/uv_nmi.c b/arch/x86/platform/uv/uv_nmi.c
index a60af0230e27..d94140842aa3 100644
--- a/arch/x86/platform/uv/uv_nmi.c
+++ b/arch/x86/platform/uv/uv_nmi.c
@@ -205,11 +205,7 @@ static int param_set_action(const char *val, const struct kernel_param *kp)
char arg[ACTION_LEN], *p;

/* (remove possible '\n') */
- strncpy(arg, val, ACTION_LEN - 1);
- arg[ACTION_LEN - 1] = '\0';
- p = strchr(arg, '\n');
- if (p)
- *p = '\0';
+ strscpy(arg, val, strnchrnul(val, ACTION_LEN, '\n') - val);

for (i = 0; i < n; i++)
if (!strcmp(arg, valid_acts[i].action))
--
2.15.2


2022-12-05 13:46:04

by Andy Shevchenko

[permalink] [raw]
Subject: Re: [PATCH linux-next v2] x86/platform/uv: use strscpy to instead of strncpy()

On Mon, Dec 5, 2022 at 1:42 PM <[email protected]> wrote:
>
> From: Xu Panda <[email protected]>

Thank you for an update, my comments below.

> The implementation of strscpy() is more robust and safer.
> That's now the recommended way to copy NUL terminated strings.
> ---
> change for v2
> - fix the mistake and make the code better and simpler,
> thanks to Andy Shevchenko.
> ---

This is (the changelog) in the wrong place.

> Signed-off-by: Xu Panda <[email protected]>
> Signed-off-by: Yang Yang <[email protected]>

> Signed-off-by: Andy Shevchenko <[email protected]>

No, I haven't given you this tag, sorry. The changelog is enough to give credit.

...

> char arg[ACTION_LEN], *p;
>
> /* (remove possible '\n') */
> - strncpy(arg, val, ACTION_LEN - 1);
> - arg[ACTION_LEN - 1] = '\0';
> - p = strchr(arg, '\n');
> - if (p)
> - *p = '\0';
> + strscpy(arg, val, strnchrnul(val, ACTION_LEN, '\n') - val);

And even better is to replace ACTION_LEN by sizeof(arg).

--
With Best Regards,
Andy Shevchenko

2022-12-05 14:22:51

by Andy Shevchenko

[permalink] [raw]
Subject: Re: [PATCH linux-next v2] x86/platform/uv: use strscpy to instead of strncpy()

On Mon, Dec 5, 2022 at 3:13 PM Andy Shevchenko
<[email protected]> wrote:
> On Mon, Dec 5, 2022 at 1:42 PM <[email protected]> wrote:

...

> > char arg[ACTION_LEN], *p;
> >
> > /* (remove possible '\n') */
> > - strncpy(arg, val, ACTION_LEN - 1);
> > - arg[ACTION_LEN - 1] = '\0';
> > - p = strchr(arg, '\n');
> > - if (p)
> > - *p = '\0';
> > + strscpy(arg, val, strnchrnul(val, ACTION_LEN, '\n') - val);
>
> And even better is to replace ACTION_LEN by sizeof(arg).

Btw, have you compiled this with `make W=1 ...`? I believe you will
get a new warning after your change.

--
With Best Regards,
Andy Shevchenko