Commit c642256b authored by Azeem Shaikh's avatar Azeem Shaikh Committed by Christian Brauner

vfs: Replace all non-returning strlcpy with strscpy

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().
No return values were used, so direct replacement is safe.

[1] https://www.kernel.org/doc/html/latest/process/deprecated.html#strlcpy
[2] https://github.com/KSPP/linux/issues/89Signed-off-by: default avatarAzeem Shaikh <azeemshaikh38@gmail.com>
Reviewed-by: default avatarKees Cook <keescook@chromium.org>
Message-Id: <20230510221119.3508930-1-azeemshaikh38@gmail.com>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 38f1755a
...@@ -150,7 +150,7 @@ __register_chrdev_region(unsigned int major, unsigned int baseminor, ...@@ -150,7 +150,7 @@ __register_chrdev_region(unsigned int major, unsigned int baseminor,
cd->major = major; cd->major = major;
cd->baseminor = baseminor; cd->baseminor = baseminor;
cd->minorct = minorct; cd->minorct = minorct;
strlcpy(cd->name, name, sizeof(cd->name)); strscpy(cd->name, name, sizeof(cd->name));
if (!prev) { if (!prev) {
cd->next = curr; cd->next = curr;
......
...@@ -595,7 +595,7 @@ struct super_block *sget_fc(struct fs_context *fc, ...@@ -595,7 +595,7 @@ struct super_block *sget_fc(struct fs_context *fc,
fc->s_fs_info = NULL; fc->s_fs_info = NULL;
s->s_type = fc->fs_type; s->s_type = fc->fs_type;
s->s_iflags |= fc->s_iflags; s->s_iflags |= fc->s_iflags;
strlcpy(s->s_id, s->s_type->name, sizeof(s->s_id)); strscpy(s->s_id, s->s_type->name, sizeof(s->s_id));
list_add_tail(&s->s_list, &super_blocks); list_add_tail(&s->s_list, &super_blocks);
hlist_add_head(&s->s_instances, &s->s_type->fs_supers); hlist_add_head(&s->s_instances, &s->s_type->fs_supers);
spin_unlock(&sb_lock); spin_unlock(&sb_lock);
...@@ -674,7 +674,7 @@ struct super_block *sget(struct file_system_type *type, ...@@ -674,7 +674,7 @@ struct super_block *sget(struct file_system_type *type,
return ERR_PTR(err); return ERR_PTR(err);
} }
s->s_type = type; s->s_type = type;
strlcpy(s->s_id, type->name, sizeof(s->s_id)); strscpy(s->s_id, type->name, sizeof(s->s_id));
list_add_tail(&s->s_list, &super_blocks); list_add_tail(&s->s_list, &super_blocks);
hlist_add_head(&s->s_instances, &type->fs_supers); hlist_add_head(&s->s_instances, &type->fs_supers);
spin_unlock(&sb_lock); spin_unlock(&sb_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment