2019-11-15 10:22:09

by Peng Fan

[permalink] [raw]
Subject: [PATCH] clk: clkdev: Replace strlcpy with strscpy

From: Peng Fan <[email protected]>

The implementation of strscpy() is more robust and safer.

The strscpy was introduced to fix some API problems around strlcpy.
strscpy is preferred to strlcpy() since the API doesn't require
reading memory from the src string beyond the specified "count" bytes,
and since the return value is easier to error-check than strlcpy()'s.
In addition, the implementation is robust to the string changing out
from underneath it, unlike the current strlcpy() implementation.

Cc: Kees Cook <[email protected]>
Signed-off-by: Peng Fan <[email protected]>
---
drivers/clk/clkdev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/clk/clkdev.c b/drivers/clk/clkdev.c
index 0f2e3fcf0f19..ee56109bc0b4 100644
--- a/drivers/clk/clkdev.c
+++ b/drivers/clk/clkdev.c
@@ -165,7 +165,7 @@ vclkdev_alloc(struct clk_hw *hw, const char *con_id, const char *dev_fmt,

cla->cl.clk_hw = hw;
if (con_id) {
- strlcpy(cla->con_id, con_id, sizeof(cla->con_id));
+ strscpy(cla->con_id, con_id, sizeof(cla->con_id));
cla->cl.con_id = cla->con_id;
}

--
2.16.4


2019-11-15 17:03:24

by Kees Cook

[permalink] [raw]
Subject: Re: [PATCH] clk: clkdev: Replace strlcpy with strscpy

On Fri, Nov 15, 2019 at 10:17:53AM +0000, Peng Fan wrote:
> From: Peng Fan <[email protected]>
>
> The implementation of strscpy() is more robust and safer.
>
> The strscpy was introduced to fix some API problems around strlcpy.
> strscpy is preferred to strlcpy() since the API doesn't require
> reading memory from the src string beyond the specified "count" bytes,
> and since the return value is easier to error-check than strlcpy()'s.
> In addition, the implementation is robust to the string changing out
> from underneath it, unlike the current strlcpy() implementation.
>
> Cc: Kees Cook <[email protected]>
> Signed-off-by: Peng Fan <[email protected]>

Reviewed-by: Kees Cook <[email protected]>

-Kees

> ---
> drivers/clk/clkdev.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/clk/clkdev.c b/drivers/clk/clkdev.c
> index 0f2e3fcf0f19..ee56109bc0b4 100644
> --- a/drivers/clk/clkdev.c
> +++ b/drivers/clk/clkdev.c
> @@ -165,7 +165,7 @@ vclkdev_alloc(struct clk_hw *hw, const char *con_id, const char *dev_fmt,
>
> cla->cl.clk_hw = hw;
> if (con_id) {
> - strlcpy(cla->con_id, con_id, sizeof(cla->con_id));
> + strscpy(cla->con_id, con_id, sizeof(cla->con_id));
> cla->cl.con_id = cla->con_id;
> }
>
> --
> 2.16.4
>

--
Kees Cook