2022-09-21 10:09:16

by CGEL

[permalink] [raw]
Subject: [PATCH linux-next] um: use strscpy() is more robust and safer

From: ye xingchen <[email protected]>

The implementation of strscpy() is more robust and safer.

That's now the recommended way to copy NUL terminated strings.

Reported-by: Zeal Robot <[email protected]>
Signed-off-by: ye xingchen <[email protected]>
---
arch/um/os-Linux/umid.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/um/os-Linux/umid.c b/arch/um/os-Linux/umid.c
index 7a1abb829930..288c422bfa96 100644
--- a/arch/um/os-Linux/umid.c
+++ b/arch/um/os-Linux/umid.c
@@ -40,7 +40,7 @@ static int __init make_uml_dir(void)
__func__);
goto err;
}
- strlcpy(dir, home, sizeof(dir));
+ strscpy(dir, home, sizeof(dir));
uml_dir++;
}
strlcat(dir, uml_dir, sizeof(dir));
@@ -243,7 +243,7 @@ int __init set_umid(char *name)
if (strlen(name) > UMID_LEN - 1)
return -E2BIG;

- strlcpy(umid, name, sizeof(umid));
+ strscpy(umid, name, sizeof(umid));

return 0;
}
@@ -262,7 +262,7 @@ static int __init make_umid(void)
make_uml_dir();

if (*umid == '\0') {
- strlcpy(tmp, uml_dir, sizeof(tmp));
+ strscpy(tmp, uml_dir, sizeof(tmp));
strlcat(tmp, "XXXXXX", sizeof(tmp));
fd = mkstemp(tmp);
if (fd < 0) {
--
2.25.1


2022-09-21 10:44:02

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [PATCH linux-next] um: use strscpy() is more robust and safer

Hi Ye,

On Wed, Sep 21, 2022 at 11:45 AM <[email protected]> wrote:
> From: ye xingchen <[email protected]>
>
> The implementation of strscpy() is more robust and safer.
>
> That's now the recommended way to copy NUL terminated strings.
>
> Reported-by: Zeal Robot <[email protected]>
> Signed-off-by: ye xingchen <[email protected]>

Thanks for your patch!

> --- a/arch/um/os-Linux/umid.c
> +++ b/arch/um/os-Linux/umid.c
> @@ -262,7 +262,7 @@ static int __init make_umid(void)
> make_uml_dir();
>
> if (*umid == '\0') {
> - strlcpy(tmp, uml_dir, sizeof(tmp));
> + strscpy(tmp, uml_dir, sizeof(tmp));
> strlcat(tmp, "XXXXXX", sizeof(tmp));

Do we need strscat(), too? ;-)

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2022-09-22 03:10:47

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH linux-next] um: use strscpy() is more robust and safer

Hi,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on next-20220920]

url: https://github.com/intel-lab-lkp/linux/commits/cgel-zte-gmail-com/um-use-strscpy-is-more-robust-and-safer/20220921-173157
base: ef08d387bbbc20df740ced8caee0ffac835869ac
config: um-i386_defconfig
compiler: gcc-11 (Debian 11.3.0-5) 11.3.0
reproduce (this is a W=1 build):
# https://github.com/intel-lab-lkp/linux/commit/e6fc2defb5c99c34a29cdc7f79df8d543e8d30a5
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review cgel-zte-gmail-com/um-use-strscpy-is-more-robust-and-safer/20220921-173157
git checkout e6fc2defb5c99c34a29cdc7f79df8d543e8d30a5
# save the config file
mkdir build_dir && cp config build_dir/.config
make W=1 O=build_dir ARCH=um SUBARCH=i386 SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

arch/um/os-Linux/umid.c: In function 'make_uml_dir':
>> arch/um/os-Linux/umid.c:43:17: error: implicit declaration of function 'strscpy'; did you mean 'strncpy'? [-Werror=implicit-function-declaration]
43 | strscpy(dir, home, sizeof(dir));
| ^~~~~~~
| strncpy
arch/um/os-Linux/umid.c: In function 'is_umdir_used':
arch/um/os-Linux/umid.c:139:23: warning: variable 'err' set but not used [-Wunused-but-set-variable]
139 | int fd, p, n, err;
| ^~~
cc1: some warnings being treated as errors


vim +43 arch/um/os-Linux/umid.c

27
28 static int __init make_uml_dir(void)
29 {
30 char dir[512] = { '\0' };
31 int len, err;
32
33 if (*uml_dir == '~') {
34 char *home = getenv("HOME");
35
36 err = -ENOENT;
37 if (home == NULL) {
38 printk(UM_KERN_ERR
39 "%s: no value in environment for $HOME\n",
40 __func__);
41 goto err;
42 }
> 43 strscpy(dir, home, sizeof(dir));
44 uml_dir++;
45 }
46 strlcat(dir, uml_dir, sizeof(dir));
47 len = strlen(dir);
48 if (len > 0 && dir[len - 1] != '/')
49 strlcat(dir, "/", sizeof(dir));
50
51 err = -ENOMEM;
52 uml_dir = malloc(strlen(dir) + 1);
53 if (uml_dir == NULL) {
54 printk(UM_KERN_ERR "%s : malloc failed, errno = %d\n",
55 __func__, errno);
56 goto err;
57 }
58 strcpy(uml_dir, dir);
59
60 if ((mkdir(uml_dir, 0777) < 0) && (errno != EEXIST)) {
61 printk(UM_KERN_ERR "Failed to mkdir '%s': %s\n",
62 uml_dir, strerror(errno));
63 err = -errno;
64 goto err_free;
65 }
66 return 0;
67
68 err_free:
69 free(uml_dir);
70 err:
71 uml_dir = NULL;
72 return err;
73 }
74

--
0-DAY CI Kernel Test Service
https://01.org/lkp


Attachments:
(No filename) (3.00 kB)
config (42.97 kB)
Download all attachments