Messages in this thread Patch in this message | | | Date | Wed, 30 Aug 2023 14:17:12 -0700 | From | Kees Cook <> | Subject | Re: [PATCH] init/version.c: Replace strlcpy with strscpy |
| |
On Wed, Aug 30, 2023 at 04:08:06PM +0000, Azeem Shaikh wrote: > 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]. > In an effort to remove strlcpy() completely [2], replace > strlcpy() here with strscpy(). > > Direct replacement is safe here since return value of -errno > is used to check for truncation instead of sizeof(dest). > > [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> > --- > init/version.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/init/version.c b/init/version.c > index f117921811b4..94c96f6fbfe6 100644 > --- a/init/version.c > +++ b/init/version.c > @@ -21,10 +21,10 @@ static int __init early_hostname(char *arg) > { > size_t bufsize = sizeof(init_uts_ns.name.nodename); > size_t maxlen = bufsize - 1; > - size_t arglen; > + ssize_t arglen; > > - arglen = strlcpy(init_uts_ns.name.nodename, arg, bufsize); > - if (arglen > maxlen) { > + arglen = strscpy(init_uts_ns.name.nodename, arg, bufsize); > + if (arglen < 0) {
nitpick: this is no longer "length of arg", it's the length of the destination string. Regardless:
Reviewed-by: Kees Cook <keescook@chromium.org>
> pr_warn("hostname parameter exceeds %zd characters and will be truncated", > maxlen); > } > -- > 2.41.0.255.g8b1d071c50-goog > >
-- Kees Cook
| |