* [PATCH] clk: eswin: Zero-initialize stack-allocated clk_init_data
@ 2026-07-10 14:15 kdamaski
2026-07-13 2:33 ` Xuyang Dong
2026-07-14 14:17 ` Brian Masney
0 siblings, 2 replies; 3+ messages in thread
From: kdamaski @ 2026-07-10 14:15 UTC (permalink / raw)
To: Yifeng Huang, Xuyang Dong, Michael Turquette, Stephen Boyd
Cc: Brian Masney, linux-clk, linux-kernel, Kostas Damaskinakis
From: Kostas Damaskinakis <kostas.damaskinakis@gmail.com>
eswin_clk_register_pll() and eswin_register_clkdiv() declare a struct
clk_init_data on the stack and only initialize some of its fields
(parent_data respectively parent_hws). clk_core_populate_parent_map()
checks parent_names first and parent_data second before falling back
to parent_hws, so leftover stack garbage in the uninitialized fields
hijacks parent resolution and the clk core dereferences a bogus
pointer:
Unable to handle kernel NULL pointer dereference at virtual address 000000000000000c
Oops [#1]
epc : __clk_register+0x31a/0x7f0
[<ffffffff805dc774>] __clk_register+0x31a/0x7f0
[<ffffffff805dcd76>] devm_clk_hw_register+0x2a/0x94
[<ffffffff805e319a>] eswin_register_clkdiv+0x80/0xd0
[<ffffffff805e34a0>] eswin_clk_register_clks+0x162/0x1a0
[<ffffffff805e3736>] eic7700_clk_probe+0x146/0x180
[<ffffffff8065d23c>] platform_probe+0x3c/0x7a
Observed on EIC7700 hardware (with the driver backported to a 6.17
tree); whether the bug triggers depends entirely on what the stack
happens to contain when the registration helpers run.
Zero-initialize both structures.
Fixes: cd44f127c1d4 ("clk: eswin: Add eic7700 clock driver")
Signed-off-by: Kostas Damaskinakis <kostas.damaskinakis@gmail.com>
---
drivers/clk/eswin/clk.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/clk/eswin/clk.c b/drivers/clk/eswin/clk.c
index e09a52cc3..79d1e4c5e 100644
--- a/drivers/clk/eswin/clk.c
+++ b/drivers/clk/eswin/clk.c
@@ -204,7 +204,7 @@ int eswin_clk_register_pll(struct device *dev, struct eswin_pll_clock *clks,
int nums, struct eswin_clock_data *data)
{
struct eswin_clk_pll *p_clk = NULL;
- struct clk_init_data init;
+ struct clk_init_data init = {};
struct clk_hw *clk_hw;
int i, ret;
@@ -419,7 +419,7 @@ struct clk_hw *eswin_register_clkdiv(struct device *dev, unsigned int id,
unsigned long priv_flag, spinlock_t *lock)
{
struct eswin_divider_clock *dclk;
- struct clk_init_data init;
+ struct clk_init_data init = {};
struct clk_hw *clk_hw;
int ret;
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH] clk: eswin: Zero-initialize stack-allocated clk_init_data
2026-07-10 14:15 [PATCH] clk: eswin: Zero-initialize stack-allocated clk_init_data kdamaski
@ 2026-07-13 2:33 ` Xuyang Dong
2026-07-14 14:17 ` Brian Masney
1 sibling, 0 replies; 3+ messages in thread
From: Xuyang Dong @ 2026-07-13 2:33 UTC (permalink / raw)
To: Kostas Damaskinakis
Cc: Yifeng Huang, Michael Turquette, Stephen Boyd, Brian Masney,
linux-clk, linux-kernel
>
> eswin_clk_register_pll() and eswin_register_clkdiv() declare a struct
> clk_init_data on the stack and only initialize some of its fields
> (parent_data respectively parent_hws). clk_core_populate_parent_map()
> checks parent_names first and parent_data second before falling back
> to parent_hws, so leftover stack garbage in the uninitialized fields
> hijacks parent resolution and the clk core dereferences a bogus
> pointer:
>
> Unable to handle kernel NULL pointer dereference at virtual address 000000000000000c
> Oops [#1]
> epc : __clk_register+0x31a/0x7f0
> [<ffffffff805dc774>] __clk_register+0x31a/0x7f0
> [<ffffffff805dcd76>] devm_clk_hw_register+0x2a/0x94
> [<ffffffff805e319a>] eswin_register_clkdiv+0x80/0xd0
> [<ffffffff805e34a0>] eswin_clk_register_clks+0x162/0x1a0
> [<ffffffff805e3736>] eic7700_clk_probe+0x146/0x180
> [<ffffffff8065d23c>] platform_probe+0x3c/0x7a
>
> Observed on EIC7700 hardware (with the driver backported to a 6.17
> tree); whether the bug triggers depends entirely on what the stack
> happens to contain when the registration helpers run.
>
> Zero-initialize both structures.
>
> Fixes: cd44f127c1d4 ("clk: eswin: Add eic7700 clock driver")
> Signed-off-by: Kostas Damaskinakis <kostas.damaskinakis@gmail.com>
> ---
> drivers/clk/eswin/clk.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/clk/eswin/clk.c b/drivers/clk/eswin/clk.c
> index e09a52cc3..79d1e4c5e 100644
> --- a/drivers/clk/eswin/clk.c
> +++ b/drivers/clk/eswin/clk.c
> @@ -204,7 +204,7 @@ int eswin_clk_register_pll(struct device *dev, struct eswin_pll_clock *clks,
> int nums, struct eswin_clock_data *data)
> {
> struct eswin_clk_pll *p_clk = NULL;
> - struct clk_init_data init;
> + struct clk_init_data init = {};
> struct clk_hw *clk_hw;
> int i, ret;
>
> @@ -419,7 +419,7 @@ struct clk_hw *eswin_register_clkdiv(struct device *dev, unsigned int id,
> unsigned long priv_flag, spinlock_t *lock)
> {
> struct eswin_divider_clock *dclk;
> - struct clk_init_data init;
> + struct clk_init_data init = {};
> struct clk_hw *clk_hw;
> int ret;
>
Acked-by: Xuyang Dong <dongxuyang@eswincomputing.com>
Thanks,
Xuyang
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] clk: eswin: Zero-initialize stack-allocated clk_init_data
2026-07-10 14:15 [PATCH] clk: eswin: Zero-initialize stack-allocated clk_init_data kdamaski
2026-07-13 2:33 ` Xuyang Dong
@ 2026-07-14 14:17 ` Brian Masney
1 sibling, 0 replies; 3+ messages in thread
From: Brian Masney @ 2026-07-14 14:17 UTC (permalink / raw)
To: kdamaski
Cc: Yifeng Huang, Xuyang Dong, Michael Turquette, Stephen Boyd,
linux-clk, linux-kernel
On Fri, Jul 10, 2026 at 05:15:20PM +0300, kdamaski wrote:
> From: Kostas Damaskinakis <kostas.damaskinakis@gmail.com>
>
> eswin_clk_register_pll() and eswin_register_clkdiv() declare a struct
> clk_init_data on the stack and only initialize some of its fields
> (parent_data respectively parent_hws). clk_core_populate_parent_map()
> checks parent_names first and parent_data second before falling back
> to parent_hws, so leftover stack garbage in the uninitialized fields
> hijacks parent resolution and the clk core dereferences a bogus
> pointer:
>
> Unable to handle kernel NULL pointer dereference at virtual address 000000000000000c
> Oops [#1]
> epc : __clk_register+0x31a/0x7f0
> [<ffffffff805dc774>] __clk_register+0x31a/0x7f0
> [<ffffffff805dcd76>] devm_clk_hw_register+0x2a/0x94
> [<ffffffff805e319a>] eswin_register_clkdiv+0x80/0xd0
> [<ffffffff805e34a0>] eswin_clk_register_clks+0x162/0x1a0
> [<ffffffff805e3736>] eic7700_clk_probe+0x146/0x180
> [<ffffffff8065d23c>] platform_probe+0x3c/0x7a
>
> Observed on EIC7700 hardware (with the driver backported to a 6.17
> tree); whether the bug triggers depends entirely on what the stack
> happens to contain when the registration helpers run.
>
> Zero-initialize both structures.
>
> Fixes: cd44f127c1d4 ("clk: eswin: Add eic7700 clock driver")
> Signed-off-by: Kostas Damaskinakis <kostas.damaskinakis@gmail.com>
Reviewed-by: Brian Masney <bmasney@redhat.com>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-07-14 14:17 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-10 14:15 [PATCH] clk: eswin: Zero-initialize stack-allocated clk_init_data kdamaski
2026-07-13 2:33 ` Xuyang Dong
2026-07-14 14:17 ` Brian Masney
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox