Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

NFS: Prefer strscpy over strlcpy calls

strlcpy() reads the entire source buffer first.
This read may exceed the destination size limit.
This is both inefficient and can lead to linear read
overflows if a source string is not NUL-terminated [1].
Check for strscpy()'s return value of -E2BIG on truncate for safe
replacement with strlcpy().

This is part of a tree-wide cleanup to remove the strlcpy() function
entirely from the kernel [2].

[1] https://www.kernel.org/doc/html/latest/process/deprecated.html#strlcpy
[2] https://github.com/KSPP/linux/issues/89

Signed-off-by: Azeem Shaikh <azeemshaikh38@gmail.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/20230512155749.1356958-1-azeemshaikh38@gmail.com

authored by

Azeem Shaikh and committed by
Kees Cook
8ca25e00 30ad0627

+1 -1
+1 -1
fs/nfs/nfsroot.c
··· 164 164 static int __init root_nfs_copy(char *dest, const char *src, 165 165 const size_t destlen) 166 166 { 167 - if (strlcpy(dest, src, destlen) > destlen) 167 + if (strscpy(dest, src, destlen) == -E2BIG) 168 168 return -1; 169 169 return 0; 170 170 }