drivers/infiniband/core/ucaps.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
From: Arnd Bergmann <arnd@arndb.de>
Passing a non-constant format string to dev_set_name causes a warning:
drivers/infiniband/core/ucaps.c:173:33: error: format string is not a string literal (potentially insecure) [-Werror,-Wformat-security]
173 | ret = dev_set_name(&ucap->dev, ucap_names[type]);
| ^~~~~~~~~~~~~~~~
drivers/infiniband/core/ucaps.c:173:33: note: treat the string as an argument to avoid this
173 | ret = dev_set_name(&ucap->dev, ucap_names[type]);
| ^
| "%s",
Turn the name into thet %s argument as suggested by gcc.
Fixes: 61e51682816d ("RDMA/uverbs: Introduce UCAP (User CAPabilities) API")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
drivers/infiniband/core/ucaps.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/infiniband/core/ucaps.c b/drivers/infiniband/core/ucaps.c
index 6853c6d078f9..de5cb8bf0a61 100644
--- a/drivers/infiniband/core/ucaps.c
+++ b/drivers/infiniband/core/ucaps.c
@@ -170,7 +170,7 @@ int ib_create_ucap(enum rdma_user_cap type)
ucap->dev.class = &ucaps_class;
ucap->dev.devt = MKDEV(MAJOR(ucaps_base_dev), type);
ucap->dev.release = ucap_dev_release;
- ret = dev_set_name(&ucap->dev, ucap_names[type]);
+ ret = dev_set_name(&ucap->dev, "%s", ucap_names[type]);
if (ret)
goto err_device;
--
2.39.5
On Fri, Mar 14, 2025 at 04:57:15PM +0100, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd@arndb.de>
>
> Passing a non-constant format string to dev_set_name causes a warning:
>
> drivers/infiniband/core/ucaps.c:173:33: error: format string is not a string literal (potentially insecure) [-Werror,-Wformat-security]
> 173 | ret = dev_set_name(&ucap->dev, ucap_names[type]);
> | ^~~~~~~~~~~~~~~~
> drivers/infiniband/core/ucaps.c:173:33: note: treat the string as an argument to avoid this
> 173 | ret = dev_set_name(&ucap->dev, ucap_names[type]);
> | ^
> | "%s",
>
> Turn the name into thet %s argument as suggested by gcc.
>
> Fixes: 61e51682816d ("RDMA/uverbs: Introduce UCAP (User CAPabilities) API")
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> Reviewed-by: Zhu Yanjun <yanjun.zhu@linux.dev>
> Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
> ---
> drivers/infiniband/core/ucaps.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
Applied to for-rc, thanks
Jason
On Fri, Mar 14, 2025 at 04:57:15PM +0100, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd@arndb.de>
>
> Passing a non-constant format string to dev_set_name causes a warning:
>
> drivers/infiniband/core/ucaps.c:173:33: error: format string is not a string literal (potentially insecure) [-Werror,-Wformat-security]
> 173 | ret = dev_set_name(&ucap->dev, ucap_names[type]);
> | ^~~~~~~~~~~~~~~~
> drivers/infiniband/core/ucaps.c:173:33: note: treat the string as an argument to avoid this
> 173 | ret = dev_set_name(&ucap->dev, ucap_names[type]);
> | ^
> | "%s",
>
> Turn the name into thet %s argument as suggested by gcc.
>
> Fixes: 61e51682816d ("RDMA/uverbs: Introduce UCAP (User CAPabilities) API")
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
> drivers/infiniband/core/ucaps.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
Why don't you change ucap_names[] declaration instead?
diff --git a/drivers/infiniband/core/ucaps.c b/drivers/infiniband/core/ucaps.c
index 6853c6d078f9..90ac41bc0f07 100644
--- a/drivers/infiniband/core/ucaps.c
+++ b/drivers/infiniband/core/ucaps.c
@@ -23,7 +23,7 @@ struct ib_ucap {
struct kref ref;
};
-static const char *ucap_names[RDMA_UCAP_MAX] = {
+static const char *const ucap_names[RDMA_UCAP_MAX] = {
[RDMA_UCAP_MLX5_CTRL_LOCAL] = "mlx5_perm_ctrl_local",
[RDMA_UCAP_MLX5_CTRL_OTHER_VHCA] = "mlx5_perm_ctrl_other_vhca"
};
(END)
Thanks
>
> diff --git a/drivers/infiniband/core/ucaps.c b/drivers/infiniband/core/ucaps.c
> index 6853c6d078f9..de5cb8bf0a61 100644
> --- a/drivers/infiniband/core/ucaps.c
> +++ b/drivers/infiniband/core/ucaps.c
> @@ -170,7 +170,7 @@ int ib_create_ucap(enum rdma_user_cap type)
> ucap->dev.class = &ucaps_class;
> ucap->dev.devt = MKDEV(MAJOR(ucaps_base_dev), type);
> ucap->dev.release = ucap_dev_release;
> - ret = dev_set_name(&ucap->dev, ucap_names[type]);
> + ret = dev_set_name(&ucap->dev, "%s", ucap_names[type]);
> if (ret)
> goto err_device;
>
> --
> 2.39.5
>
On Mon, Mar 17, 2025 at 01:50:00PM +0200, Leon Romanovsky wrote:
> On Fri, Mar 14, 2025 at 04:57:15PM +0100, Arnd Bergmann wrote:
> > From: Arnd Bergmann <arnd@arndb.de>
> >
> > Passing a non-constant format string to dev_set_name causes a warning:
> >
> > drivers/infiniband/core/ucaps.c:173:33: error: format string is not a string literal (potentially insecure) [-Werror,-Wformat-security]
> > 173 | ret = dev_set_name(&ucap->dev, ucap_names[type]);
> > | ^~~~~~~~~~~~~~~~
> > drivers/infiniband/core/ucaps.c:173:33: note: treat the string as an argument to avoid this
> > 173 | ret = dev_set_name(&ucap->dev, ucap_names[type]);
> > | ^
> > | "%s",
> >
> > Turn the name into thet %s argument as suggested by gcc.
> >
> > Fixes: 61e51682816d ("RDMA/uverbs: Introduce UCAP (User CAPabilities) API")
> > Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> > ---
> > drivers/infiniband/core/ucaps.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
>
> Why don't you change ucap_names[] declaration instead?
>
> diff --git a/drivers/infiniband/core/ucaps.c b/drivers/infiniband/core/ucaps.c
> index 6853c6d078f9..90ac41bc0f07 100644
> --- a/drivers/infiniband/core/ucaps.c
> +++ b/drivers/infiniband/core/ucaps.c
> @@ -23,7 +23,7 @@ struct ib_ucap {
> struct kref ref;
> };
>
> -static const char *ucap_names[RDMA_UCAP_MAX] = {
> +static const char *const ucap_names[RDMA_UCAP_MAX] = {
> [RDMA_UCAP_MLX5_CTRL_LOCAL] = "mlx5_perm_ctrl_local",
> [RDMA_UCAP_MLX5_CTRL_OTHER_VHCA] = "mlx5_perm_ctrl_other_vhca"
> };
This should be done anyone, but it won't fix the warning. gcc is
worried that the format string could have an embedded "%XXX" or
something that would cause stack corruption. It is a security error to
push user controlled data into the format string. This isn't happening
here, but silencing gcc will need the %s.
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
For both
Jason
在 2025/3/14 16:57, Arnd Bergmann 写道:
> From: Arnd Bergmann <arnd@arndb.de>
>
> Passing a non-constant format string to dev_set_name causes a warning:
>
> drivers/infiniband/core/ucaps.c:173:33: error: format string is not a string literal (potentially insecure) [-Werror,-Wformat-security]
> 173 | ret = dev_set_name(&ucap->dev, ucap_names[type]);
> | ^~~~~~~~~~~~~~~~
> drivers/infiniband/core/ucaps.c:173:33: note: treat the string as an argument to avoid this
> 173 | ret = dev_set_name(&ucap->dev, ucap_names[type]);
> | ^
> | "%s",
>
> Turn the name into thet %s argument as suggested by gcc.
>
> Fixes: 61e51682816d ("RDMA/uverbs: Introduce UCAP (User CAPabilities) API")
This patch should be for linux-next. In the subject, linux-next should
be added.
Except the above, I am fine with this commit.
Reviewed-by: Zhu Yanjun <yanjun.zhu@linux.dev>
Zhu Yanjun
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
> drivers/infiniband/core/ucaps.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/infiniband/core/ucaps.c b/drivers/infiniband/core/ucaps.c
> index 6853c6d078f9..de5cb8bf0a61 100644
> --- a/drivers/infiniband/core/ucaps.c
> +++ b/drivers/infiniband/core/ucaps.c
> @@ -170,7 +170,7 @@ int ib_create_ucap(enum rdma_user_cap type)
> ucap->dev.class = &ucaps_class;
> ucap->dev.devt = MKDEV(MAJOR(ucaps_base_dev), type);
> ucap->dev.release = ucap_dev_release;
> - ret = dev_set_name(&ucap->dev, ucap_names[type]);
> + ret = dev_set_name(&ucap->dev, "%s", ucap_names[type]);
> if (ret)
> goto err_device;
>
--
Best Regards,
Yanjun.Zhu
© 2016 - 2025 Red Hat, Inc.