ACK: [PATCH] lib: fwts_modprobe: add helper to build module path name
ivanhu
ivan.hu at canonical.com
Tue Jul 28 15:39:19 UTC 2020
On 7/28/20 6:46 PM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> The current method of building a module pathname may cause truncation
> and gcc-10 generates build errors because of this. Add a helper that
> builds the module path that uses the BSD strlcat for safe string
> concatenation with known (and ignored) truncation since we know that
> the module path name can't exceed PATH_MAX size.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
> src/lib/src/fwts_modprobe.c | 32 +++++++++++++++++++++++++++++---
> 1 file changed, 29 insertions(+), 3 deletions(-)
>
> diff --git a/src/lib/src/fwts_modprobe.c b/src/lib/src/fwts_modprobe.c
> index ace2f50c..492bf9b4 100644
> --- a/src/lib/src/fwts_modprobe.c
> +++ b/src/lib/src/fwts_modprobe.c
> @@ -28,9 +28,36 @@
> #include <stdlib.h>
> #include <errno.h>
> #include <sys/utsname.h>
> +#include <bsd/string.h>
>
> #include "fwts.h"
>
> +/*
> + * fwts_module_path()
> + * build a new path based on basename path and
> + * the new filename (or directory name)
> + */
> +static void fwts_module_path(
> + char *newpath,
> + const size_t newpath_len,
> + const char *basepath,
> + const char *filename)
> +{
> + char *ptr = newpath;
> + size_t n = newpath_len, len;
> +
> + (void)strlcpy(ptr, basepath, n);
> + len = strlen(basepath);
> + ptr += len;
> + n -= len;
> +
> + (void)strlcpy(ptr, "/", n);
> + ptr++;
> + n--;
> +
> + (void)strlcpy(ptr, filename, n);
> +}
> +
> /*
> * fwts_module_find()
> * recursively search for module from the basepath start
> @@ -59,8 +86,7 @@ static bool fwts_module_find(
>
> switch (de->d_type) {
> case DT_DIR:
> - (void)snprintf(newpath, sizeof(newpath), "%s/%s",
> - basepath, de->d_name);
> + fwts_module_path(newpath, sizeof(newpath), basepath, de->d_name);
> if (fwts_module_find(module, newpath, path, path_len)) {
> (void)closedir(dir);
> return true;
> @@ -68,7 +94,7 @@ static bool fwts_module_find(
> break;
> case DT_REG:
> if (!strcmp(de->d_name, module)) {
> - (void)snprintf(path, path_len, "%s/%s", basepath, module);
> + fwts_module_path(path, path_len, basepath, module);
> (void)closedir(dir);
> return true;
> }
>
Acked-by: Ivan Hu <ivan.hu at canonical.com>
More information about the fwts-devel
mailing list