Re: [PATCH v2] iio: frequency: adf4377: Fully initialize clk_init_data and clk_parent_data
From: Jonathan Cameron
Date: Thu Aug 20 2026 - 21:06:12 EST
On Thu, 20 Aug 2026 11:19:52 +0200
Geert Uytterhoeven <geert+renesas@xxxxxxxxx> 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@xxxxxxxxx>
> ---
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@xxxxxxxxx),
> - 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"))