string: Allow 2-argument strscpy()
authorKees Cook <keescook@chromium.org>
Wed, 20 Sep 2023 19:38:14 +0000 (12:38 -0700)
committerKees Cook <keescook@chromium.org>
Wed, 21 Feb 2024 04:47:32 +0000 (20:47 -0800)
commite6584c3964f2ff76a9fb5a701e4a59997b35e547
tree330e893f5b937e2c335c08475a59df545b75f9e7
parentf478898e0aa74a759fcf629a3ee8b040467b8533
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
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>
arch/um/include/shared/user.h
include/linux/fortify-string.h
include/linux/string.h
lib/string.c