Message ID | 20220426075228.3239-1-etienne.carriere@linaro.org |
---|---|
State | New |
Headers | show |
Series | [v2] clk: scmi: fix invalid clock name references | expand |
Dear all, On Tue, 26 Apr 2022 at 09:52, Etienne Carriere <etienne.carriere@linaro.org> wrote: > > Fixes clock name references in scmi_clk driver. SCMI clock names are > retrieved from the SCMI firmware by invoking SCMI commands using the > stack for SCMI response message hence clocks names located in the > stack must be duplicated before being registered in the clock framework. > > Fixes: 7c33f78983c3 ("clk: scmi: register scmi clocks with CCF") > Reported-by: scan-admin@coverity.com > Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org> > --- > Changes since v1: > - Fix buggy test on strdup() return value > --- > drivers/clk/clk_scmi.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/clk/clk_scmi.c b/drivers/clk/clk_scmi.c > index 57022685e2..c8e10c4aea 100644 > --- a/drivers/clk/clk_scmi.c > +++ b/drivers/clk/clk_scmi.c > @@ -1,6 +1,6 @@ > // SPDX-License-Identifier: GPL-2.0+ > /* > - * Copyright (C) 2019-2020 Linaro Limited > + * Copyright (C) 2019-2022 Linaro Limited > */ > > #define LOG_CATEGORY UCLASS_CLK > @@ -12,6 +12,7 @@ > #include <scmi_protocols.h> > #include <asm/types.h> > #include <linux/clk-provider.h> > +#include <linux/string.h> > > static int scmi_clk_get_num_clock(struct udevice *dev, size_t *num_clocks) > { > @@ -53,7 +54,9 @@ static int scmi_clk_get_attibute(struct udevice *dev, int clkid, char **name) > if (ret) > return ret; > > - *name = out.clock_name; > + *name = strdup(out.clock_name); > + if (!*name) > + return -ENOMEM; > > return 0; > } > -- > 2.17.1 > I posted this change too quickly and missed something. With this change, the clock name is duplicated twice since it's already duplicated in caller function scmi_clk_probe(). Please discard this change. I'll send a v3 proposal to address the issue in a more consistent way. My apologies, Etienne
diff --git a/drivers/clk/clk_scmi.c b/drivers/clk/clk_scmi.c index 57022685e2..c8e10c4aea 100644 --- a/drivers/clk/clk_scmi.c +++ b/drivers/clk/clk_scmi.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0+ /* - * Copyright (C) 2019-2020 Linaro Limited + * Copyright (C) 2019-2022 Linaro Limited */ #define LOG_CATEGORY UCLASS_CLK @@ -12,6 +12,7 @@ #include <scmi_protocols.h> #include <asm/types.h> #include <linux/clk-provider.h> +#include <linux/string.h> static int scmi_clk_get_num_clock(struct udevice *dev, size_t *num_clocks) { @@ -53,7 +54,9 @@ static int scmi_clk_get_attibute(struct udevice *dev, int clkid, char **name) if (ret) return ret; - *name = out.clock_name; + *name = strdup(out.clock_name); + if (!*name) + return -ENOMEM; return 0; }
Fixes clock name references in scmi_clk driver. SCMI clock names are retrieved from the SCMI firmware by invoking SCMI commands using the stack for SCMI response message hence clocks names located in the stack must be duplicated before being registered in the clock framework. Fixes: 7c33f78983c3 ("clk: scmi: register scmi clocks with CCF") Reported-by: scan-admin@coverity.com Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org> --- Changes since v1: - Fix buggy test on strdup() return value --- drivers/clk/clk_scmi.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)