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 [1]
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>
This commit is contained in:
committed by
Mike Snitzer
parent
e9d7bd2c86
commit
0ffb645ea8
@@ -1295,8 +1295,8 @@ static void retrieve_status(struct dm_table *table,
|
||||
spec->status = 0;
|
||||
spec->sector_start = ti->begin;
|
||||
spec->length = ti->len;
|
||||
strncpy(spec->target_type, ti->type->name,
|
||||
sizeof(spec->target_type) - 1);
|
||||
strscpy_pad(spec->target_type, ti->type->name,
|
||||
sizeof(spec->target_type));
|
||||
|
||||
outptr += sizeof(struct dm_target_spec);
|
||||
remaining = len - (outptr - outbuf);
|
||||
|
||||
Reference in New Issue
Block a user