mbox series

[RESEND,RFC,v2,0/4] Dynamic OF and use after free related fixes

Message ID 20220623121857.886-1-nuno.sa@analog.com (mailing list archive)
Headers show
Series Dynamic OF and use after free related fixes | expand

Message

Nuno Sa June 23, 2022, 12:18 p.m. UTC
This series is a collection of fixes with things I encountered when
handling a system with device tree overlays "fun". This effectively
means
removing and adding devices which led to me the found issues.

patch 1 is fairly straight and indeed an issue related with of_nodes not
being put.

For patches 2 and 3, they are only triggered if someone first removes
the provider which is a dumb thing to do. However, I guess we should be
prepared for that and the framework even has some efforts to deal with
these cases (eg: clk_nodrv_ops). That said, patch 2 is more or less
straight (even though catching the guilty line wasn't), we add something
to a list during resgister, we need to remove it on the unregister path.
Patch 3 is a different beast... though I think krefs are the proper
solution here, I'm not sure I covered all the corner cases with all the
reparenting that might happen (mainly reason why this is RFC). Nullyfing
clk_core->parent during unregister might suffice but I'm more in favor
of proper refcounting (for now at least). Patch 3 also does not have a
fixes tag because I genuily don't know when this became a problem. Maybe
right from the beginning?

Patch 4 is just a minor improvement and not really a fix...

v2:
 * add an helper function in '__set_clk_parents()' to set each parent
separately;
 * massaged commit message in patch 2/4
("clk: fix clk not being unlinked from consumers list") as per Stephen
feedback.

Nuno Sá (4):
  clk: clk-conf: properly release of nodes
  clk: fix clk not being unlinked from consumers list
  clk: refcount the active parent clk_core
  clk: use clk_core_unlink_consumer() helper

 drivers/clk/clk-conf.c | 126 +++++++++++++++++++++++++----------------
 drivers/clk/clk.c      |  83 +++++++++++++++++----------
 2 files changed, 131 insertions(+), 78 deletions(-)

Comments

Nuno Sá July 13, 2022, 1:24 p.m. UTC | #1
On Thu, 2022-06-23 at 14:18 +0200, Nuno Sá wrote:
> This series is a collection of fixes with things I encountered when
> handling a system with device tree overlays "fun". This effectively
> means
> removing and adding devices which led to me the found issues.
> 
> patch 1 is fairly straight and indeed an issue related with of_nodes
> not
> being put.
> 
> For patches 2 and 3, they are only triggered if someone first removes
> the provider which is a dumb thing to do. However, I guess we should
> be
> prepared for that and the framework even has some efforts to deal
> with
> these cases (eg: clk_nodrv_ops). That said, patch 2 is more or less
> straight (even though catching the guilty line wasn't), we add
> something
> to a list during resgister, we need to remove it on the unregister
> path.
> Patch 3 is a different beast... though I think krefs are the proper
> solution here, I'm not sure I covered all the corner cases with all
> the
> reparenting that might happen (mainly reason why this is RFC).
> Nullyfing
> clk_core->parent during unregister might suffice but I'm more in
> favor
> of proper refcounting (for now at least). Patch 3 also does not have
> a
> fixes tag because I genuily don't know when this became a problem.
> Maybe
> right from the beginning?
> 
> Patch 4 is just a minor improvement and not really a fix...
> 
> v2:
>  * add an helper function in '__set_clk_parents()' to set each parent
> separately;
>  * massaged commit message in patch 2/4
> ("clk: fix clk not being unlinked from consumers list") as per
> Stephen
> feedback.
> 
> Nuno Sá (4):
>   clk: clk-conf: properly release of nodes
>   clk: fix clk not being unlinked from consumers list
>   clk: refcount the active parent clk_core
>   clk: use clk_core_unlink_consumer() helper
> 
>  drivers/clk/clk-conf.c | 126 +++++++++++++++++++++++++--------------
> --
>  drivers/clk/clk.c      |  83 +++++++++++++++++----------
>  2 files changed, 131 insertions(+), 78 deletions(-)
> 

Hi Michael and Stephen,

Is there anything missing on this one? I understand that maintainers
are very busy people but this is already a RESEND and I already waited
a fair amount of time before deciding for this mail.

Let me know if there's anything for me to do or if the series is just
something you are not keen to apply (even though I think the series
makes sense and makes the code more robust).

- Nuno Sá
Nuno Sá Sept. 12, 2022, 7:12 a.m. UTC | #2
On Wed, 2022-07-13 at 15:24 +0200, Nuno Sá wrote:
> On Thu, 2022-06-23 at 14:18 +0200, Nuno Sá wrote:
> > This series is a collection of fixes with things I encountered when
> > handling a system with device tree overlays "fun". This effectively
> > means
> > removing and adding devices which led to me the found issues.
> > 
> > patch 1 is fairly straight and indeed an issue related with
> > of_nodes
> > not
> > being put.
> > 
> > For patches 2 and 3, they are only triggered if someone first
> > removes
> > the provider which is a dumb thing to do. However, I guess we
> > should
> > be
> > prepared for that and the framework even has some efforts to deal
> > with
> > these cases (eg: clk_nodrv_ops). That said, patch 2 is more or less
> > straight (even though catching the guilty line wasn't), we add
> > something
> > to a list during resgister, we need to remove it on the unregister
> > path.
> > Patch 3 is a different beast... though I think krefs are the proper
> > solution here, I'm not sure I covered all the corner cases with all
> > the
> > reparenting that might happen (mainly reason why this is RFC).
> > Nullyfing
> > clk_core->parent during unregister might suffice but I'm more in
> > favor
> > of proper refcounting (for now at least). Patch 3 also does not
> > have
> > a
> > fixes tag because I genuily don't know when this became a problem.
> > Maybe
> > right from the beginning?
> > 
> > Patch 4 is just a minor improvement and not really a fix...
> > 
> > v2:
> >  * add an helper function in '__set_clk_parents()' to set each
> > parent
> > separately;
> >  * massaged commit message in patch 2/4
> > ("clk: fix clk not being unlinked from consumers list") as per
> > Stephen
> > feedback.
> > 
> > Nuno Sá (4):
> >   clk: clk-conf: properly release of nodes
> >   clk: fix clk not being unlinked from consumers list
> >   clk: refcount the active parent clk_core
> >   clk: use clk_core_unlink_consumer() helper
> > 
> >  drivers/clk/clk-conf.c | 126 +++++++++++++++++++++++++------------
> > --
> > --
> >  drivers/clk/clk.c      |  83 +++++++++++++++++----------
> >  2 files changed, 131 insertions(+), 78 deletions(-)
> > 
> 
> Hi Michael and Stephen,
> 
> Is there anything missing on this one? I understand that maintainers
> are very busy people but this is already a RESEND and I already
> waited
> a fair amount of time before deciding for this mail.
> 
> Let me know if there's anything for me to do or if the series is just
> something you are not keen to apply (even though I think the series
> makes sense and makes the code more robust).
> 
> - Nuno Sá

Pinging this one more time... I'm happy to rebase and resend but it
would be nice to have some feedback. Otherwise I'll just forget about
this which is, honesty, very sad since I did spent some time on it :)
and it is fixing some real bugs (even though in reality are very hard
to trigger).

- Nuno Sá