string: Allow 2-argument strscpy()
Using sizeof(dst) for the "size" argument in strscpy() is the
overwhelmingly common case. Instead of requiring this everywhere, allow a
2-argument version to be used that will use the sizeof() internally. There
are other functions in the kernel with optional arguments[1], so this
isn't unprecedented, and improves readability. Update and relocate the
kern-doc for strscpy() too, and drop __HAVE_ARCH_STRSCPY as it is unused.
Adjust ARCH=um build to notice the changed export name, as it doesn't
do full header includes for the string helpers.
This could additionally let us save a few hundred lines of code:
1177 files changed, 2455 insertions(+), 3026 deletions(-)
with a treewide cleanup using Coccinelle:
@needless_arg@
expression DST, SRC;
@@
strscpy(DST, SRC
-, sizeof(DST)
)
Link: https://elixir.bootlin.com/linux/v6.7/source/include/linux/pci.h#L1517 [1]
Reviewed-by: Justin Stitt <justinstitt@google.com>
Cc: Andy Shevchenko <andy@kernel.org>
Cc: linux-hardening@vger.kernel.org
Signed-off-by: Kees Cook <keescook@chromium.org>
This commit is contained in:
+2
-4
@@ -104,8 +104,7 @@ char *strncpy(char *dest, const char *src, size_t count)
|
||||
EXPORT_SYMBOL(strncpy);
|
||||
#endif
|
||||
|
||||
#ifndef __HAVE_ARCH_STRSCPY
|
||||
ssize_t strscpy(char *dest, const char *src, size_t count)
|
||||
ssize_t sized_strscpy(char *dest, const char *src, size_t count)
|
||||
{
|
||||
const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS;
|
||||
size_t max = count;
|
||||
@@ -171,8 +170,7 @@ ssize_t strscpy(char *dest, const char *src, size_t count)
|
||||
|
||||
return -E2BIG;
|
||||
}
|
||||
EXPORT_SYMBOL(strscpy);
|
||||
#endif
|
||||
EXPORT_SYMBOL(sized_strscpy);
|
||||
|
||||
/**
|
||||
* stpcpy - copy a string from src to dest returning a pointer to the new end
|
||||
|
||||
Reference in New Issue
Block a user