]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
keys: Replace deprecated strncpy in ecryptfs_fill_auth_tok
authorThorsten Blum <thorsten.blum@linux.dev>
Mon, 13 Oct 2025 15:26:28 +0000 (17:26 +0200)
committerJarkko Sakkinen <jarkko@kernel.org>
Thu, 27 Nov 2025 21:50:20 +0000 (23:50 +0200)
strncpy() is deprecated for NUL-terminated destination buffers; use
strscpy_pad() instead to retain the NUL-padding behavior of strncpy().

The destination buffer is initialized using kzalloc() with a 'signature'
size of ECRYPTFS_PASSWORD_SIG_SIZE + 1. strncpy() then copies up to
ECRYPTFS_PASSWORD_SIG_SIZE bytes from 'key_desc', NUL-padding any
remaining bytes if needed, but expects the last byte to be zero.

strscpy_pad() also copies the source string to 'signature', and NUL-pads
the destination buffer if needed, but ensures it's always NUL-terminated
without relying on it being zero-initialized.

strscpy_pad() automatically determines the size of the fixed-length
destination buffer via sizeof() when the optional size argument is
omitted, making an explicit size unnecessary.

In encrypted_init(), the source string 'key_desc' is validated by
valid_ecryptfs_desc() before calling ecryptfs_fill_auth_tok(), and is
therefore NUL-terminated and satisfies the __must_be_cstr() requirement
of strscpy_pad().

Link: https://github.com/KSPP/linux/issues/90
Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
Reviewed-by: Kees Cook <kees@kernel.org>
Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
security/keys/encrypted-keys/ecryptfs_format.c

index 8fdd76105ce343ed52651e4a03fedd6b1d3055fc..2fc6f3a6613508b6ba0edc512fcbd0ab4af402b8 100644 (file)
@@ -54,8 +54,7 @@ int ecryptfs_fill_auth_tok(struct ecryptfs_auth_tok *auth_tok,
        auth_tok->version = (((uint16_t)(major << 8) & 0xFF00)
                             | ((uint16_t)minor & 0x00FF));
        auth_tok->token_type = ECRYPTFS_PASSWORD;
-       strncpy((char *)auth_tok->token.password.signature, key_desc,
-               ECRYPTFS_PASSWORD_SIG_SIZE);
+       strscpy_pad(auth_tok->token.password.signature, key_desc);
        auth_tok->token.password.session_key_encryption_key_bytes =
                ECRYPTFS_MAX_KEY_BYTES;
        /*