Commit 37454bcb authored by Justin Stitt's avatar Justin Stitt Committed by Lyude Paul

drm/nouveau/pm: refactor deprecated strncpy

`strncpy` is deprecated for use on NUL-terminated destination strings [1].

We should prefer more robust and less ambiguous string interfaces.

A suitable replacement is `strscpy` [2] due to the fact that it guarantees
NUL-termination on the destination buffer without unnecessarily NUL-padding.

Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings [1]
Link: https://manpages.debian.org/testing/linux-manual-4.8/strscpy.9.en.html [2]
Link: https://github.com/KSPP/linux/issues/90
Cc: linux-hardening@vger.kernel.org
Signed-off-by: default avatarJustin Stitt <justinstitt@google.com>
Reviewed-by: default avatarKees Cook <keescook@chromium.org>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230914-strncpy-drivers-gpu-drm-nouveau-nvkm-engine-pm-base-c-v1-1-4b09ed453f84@google.com
parent 00fb28fd
...@@ -462,7 +462,7 @@ nvkm_perfmon_mthd_query_domain(struct nvkm_perfmon *perfmon, ...@@ -462,7 +462,7 @@ nvkm_perfmon_mthd_query_domain(struct nvkm_perfmon *perfmon,
args->v0.id = di; args->v0.id = di;
args->v0.signal_nr = nvkm_perfdom_count_perfsig(dom); args->v0.signal_nr = nvkm_perfdom_count_perfsig(dom);
strncpy(args->v0.name, dom->name, sizeof(args->v0.name) - 1); strscpy(args->v0.name, dom->name, sizeof(args->v0.name));
/* Currently only global counters (PCOUNTER) are implemented /* Currently only global counters (PCOUNTER) are implemented
* but this will be different for local counters (MP). */ * but this will be different for local counters (MP). */
...@@ -513,8 +513,7 @@ nvkm_perfmon_mthd_query_signal(struct nvkm_perfmon *perfmon, ...@@ -513,8 +513,7 @@ nvkm_perfmon_mthd_query_signal(struct nvkm_perfmon *perfmon,
snprintf(args->v0.name, sizeof(args->v0.name), snprintf(args->v0.name, sizeof(args->v0.name),
"/%s/%02x", dom->name, si); "/%s/%02x", dom->name, si);
} else { } else {
strncpy(args->v0.name, sig->name, strscpy(args->v0.name, sig->name, sizeof(args->v0.name));
sizeof(args->v0.name) - 1);
} }
args->v0.signal = si; args->v0.signal = si;
...@@ -572,7 +571,7 @@ nvkm_perfmon_mthd_query_source(struct nvkm_perfmon *perfmon, ...@@ -572,7 +571,7 @@ nvkm_perfmon_mthd_query_source(struct nvkm_perfmon *perfmon,
args->v0.source = sig->source[si]; args->v0.source = sig->source[si];
args->v0.mask = src->mask; args->v0.mask = src->mask;
strncpy(args->v0.name, src->name, sizeof(args->v0.name) - 1); strscpy(args->v0.name, src->name, sizeof(args->v0.name));
} }
if (++si < source_nr) { if (++si < source_nr) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment