dm ioctl: replace deprecated strncpy with strscpy_pad
authorJustin Stitt <justinstitt@google.com>
Mon, 25 Sep 2023 06:54:51 +0000 (06:54 +0000)
committerMike Snitzer <snitzer@kernel.org>
Mon, 23 Oct 2023 17:02:37 +0000 (13:02 -0400)
commit0ffb645ea821fbad4215b6a5681b823639c24660
treeee407dcd13abcedd3e4f3b79e7a473fc3a3fd261
parente9d7bd2c8664aa43866c7985d9050a052516c07d
dm ioctl: replace deprecated strncpy with strscpy_pad

`strncpy` is deprecated for use on NUL-terminated destination strings
[1] and as such we should prefer more robust and less ambiguous string
interfaces.

We expect `spec->target_type` to be NUL-terminated based on its use with
a format string after `dm_table_add_target()` is called
|  r = dm_table_add_target(table, spec->target_type,
|  (sector_t) spec->sector_start,
|  (sector_t) spec->length,
|  target_params);
... wherein `spec->target_type` is passed as parameter `type` and later
printed with DMERR:
|       DMERR("%s: %s: unknown target type", dm_device_name(t->md), type);

It appears that `spec` is not zero-allocated and thus NUL-padding may be
required in this ioctl context.

Considering the above, a suitable replacement is `strscpy_pad` due to
the fact that it guarantees NUL-termination whilst maintaining the
NUL-padding behavior that strncpy provides.

Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings
Link: https://github.com/KSPP/linux/issues/90
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Justin Stitt <justinstitt@google.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
drivers/md/dm-ioctl.c