[PATCH v2] iio: frequency: adf4377: Fully initialize clk_init_data and clk_parent_data

Geert Uytterhoeven posted 1 patch 1 month, 1 week ago
drivers/iio/frequency/adf4377.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH v2] iio: frequency: adf4377: Fully initialize clk_init_data and clk_parent_data
Posted by Geert Uytterhoeven 1 month, 1 week ago
The clk_init_data structure contains several mutually-exclusive members
for different methods to specify the possible parents of a clock,
prompting drivers to initialize only the members they need.  However,
not initializing all members may cause subtle issues, which are only
exposed when CONFIG_INIT_STACK_ALL_PATTERN or CONFIG_INIT_STACK_NONE is
enabled.

adf4377_clk_register() fills in init.parent_data, and assumes that
init.parent_names is NULL.  However, the latter is uninitialized, and
thus may cause a crash.

Similarly, adf4377_clk_register() fills in only parent_data.fw_name,
leaving other members of the clk_parent_data structure uninitialized.

Make sure all members are fully initialized, to fix such bugs, and to
avoid future breakage when converting drivers to a different method for
specifying the parents.

Fixes: 60e5448ddbec2dc2 ("iio: frequency: adf4377: add clk provider support")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
Compile-tested only.

v2:
  - Extract from series "[PATCH treewide 0/5] clk: Make sure
    clk_init_data is fully initialized (part 1)"
    (https://lore.kernel.org/cover.1787165329.git.geert+renesas@glider.be),
  - Fully initialize clk_parent_data too, as pointed out by Sashiko.
---
 drivers/iio/frequency/adf4377.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/frequency/adf4377.c b/drivers/iio/frequency/adf4377.c
index 4dd19a9aa9943c57..b8c31665857c5201 100644
--- a/drivers/iio/frequency/adf4377.c
+++ b/drivers/iio/frequency/adf4377.c
@@ -988,10 +988,10 @@ static const struct clk_ops adf4377_clk_ops = {
 
 static int adf4377_clk_register(struct adf4377_state *st)
 {
+	struct clk_parent_data parent_data = {};
 	struct spi_device *spi = st->spi;
 	struct device *dev = &spi->dev;
-	struct clk_init_data init;
-	struct clk_parent_data parent_data;
+	struct clk_init_data init = {};
 	int ret;
 
 	if (!device_property_present(dev, "#clock-cells"))
-- 
2.43.0
Re: [PATCH v2] iio: frequency: adf4377: Fully initialize clk_init_data and clk_parent_data
Posted by Jonathan Cameron 1 month, 1 week ago
On Thu, 20 Aug 2026 11:19:52 +0200
Geert Uytterhoeven <geert+renesas@glider.be> wrote:

> The clk_init_data structure contains several mutually-exclusive members
> for different methods to specify the possible parents of a clock,
> prompting drivers to initialize only the members they need.  However,
> not initializing all members may cause subtle issues, which are only
> exposed when CONFIG_INIT_STACK_ALL_PATTERN or CONFIG_INIT_STACK_NONE is
> enabled.
> 
> adf4377_clk_register() fills in init.parent_data, and assumes that
> init.parent_names is NULL.  However, the latter is uninitialized, and
> thus may cause a crash.
> 
> Similarly, adf4377_clk_register() fills in only parent_data.fw_name,
> leaving other members of the clk_parent_data structure uninitialized.
> 
> Make sure all members are fully initialized, to fix such bugs, and to
> avoid future breakage when converting drivers to a different method for
> specifying the parents.
> 
> Fixes: 60e5448ddbec2dc2 ("iio: frequency: adf4377: add clk provider support")
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
Dropped v1 and picked this up, marking it for stable and tweaking a little
to add spaces { } 
That's an IIO specific style choice.

Thanks

Jonathan

> Compile-tested only.
> 
> v2:
>   - Extract from series "[PATCH treewide 0/5] clk: Make sure
>     clk_init_data is fully initialized (part 1)"
>     (https://lore.kernel.org/cover.1787165329.git.geert+renesas@glider.be),
>   - Fully initialize clk_parent_data too, as pointed out by Sashiko.
> ---
>  drivers/iio/frequency/adf4377.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/iio/frequency/adf4377.c b/drivers/iio/frequency/adf4377.c
> index 4dd19a9aa9943c57..b8c31665857c5201 100644
> --- a/drivers/iio/frequency/adf4377.c
> +++ b/drivers/iio/frequency/adf4377.c
> @@ -988,10 +988,10 @@ static const struct clk_ops adf4377_clk_ops = {
>  
>  static int adf4377_clk_register(struct adf4377_state *st)
>  {
> +	struct clk_parent_data parent_data = {};
>  	struct spi_device *spi = st->spi;
>  	struct device *dev = &spi->dev;
> -	struct clk_init_data init;
> -	struct clk_parent_data parent_data;
> +	struct clk_init_data init = {};
>  	int ret;
>  
>  	if (!device_property_present(dev, "#clock-cells"))
Re: [PATCH v2] iio: frequency: adf4377: Fully initialize clk_init_data and clk_parent_data
Posted by Brian Masney 1 month, 1 week ago
On Thu, Aug 20, 2026 at 11:19:52AM +0200, Geert Uytterhoeven wrote:
> The clk_init_data structure contains several mutually-exclusive members
> for different methods to specify the possible parents of a clock,
> prompting drivers to initialize only the members they need.  However,
> not initializing all members may cause subtle issues, which are only
> exposed when CONFIG_INIT_STACK_ALL_PATTERN or CONFIG_INIT_STACK_NONE is
> enabled.
> 
> adf4377_clk_register() fills in init.parent_data, and assumes that
> init.parent_names is NULL.  However, the latter is uninitialized, and
> thus may cause a crash.
> 
> Similarly, adf4377_clk_register() fills in only parent_data.fw_name,
> leaving other members of the clk_parent_data structure uninitialized.
> 
> Make sure all members are fully initialized, to fix such bugs, and to
> avoid future breakage when converting drivers to a different method for
> specifying the parents.
> 
> Fixes: 60e5448ddbec2dc2 ("iio: frequency: adf4377: add clk provider support")
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>

Reviewed-by: Brian Masney <bmasney@redhat.com>
Re: [PATCH v2] iio: frequency: adf4377: Fully initialize clk_init_data and clk_parent_data
Posted by Joshua Crofts 1 month, 1 week ago
On Thu, 20 Aug 2026 11:19:52 +0200
Geert Uytterhoeven <geert+renesas@glider.be> wrote:

> The clk_init_data structure contains several mutually-exclusive members
> for different methods to specify the possible parents of a clock,
> prompting drivers to initialize only the members they need.  However,
> not initializing all members may cause subtle issues, which are only
> exposed when CONFIG_INIT_STACK_ALL_PATTERN or CONFIG_INIT_STACK_NONE is
> enabled.
> 
> adf4377_clk_register() fills in init.parent_data, and assumes that
> init.parent_names is NULL.  However, the latter is uninitialized, and
> thus may cause a crash.
> 
> Similarly, adf4377_clk_register() fills in only parent_data.fw_name,
> leaving other members of the clk_parent_data structure uninitialized.
> 
> Make sure all members are fully initialized, to fix such bugs, and to
> avoid future breakage when converting drivers to a different method for
> specifying the parents.
> 
> Fixes: 60e5448ddbec2dc2 ("iio: frequency: adf4377: add clk provider support")
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---

Reviewed-by: Joshua Crofts <joshua.crofts1@gmail.com>

-- 
Kind regards,
Joshua Crofts