Hi Mike, On Tue, 11 Aug 2009, Mike Chan wrote: > On Tue, Aug 11, 2009 at 7:38 AM, Kevin > Hilman<khilman@xxxxxxxxxxxxxxxxxxx> wrote: > > Mike Chan <mike@xxxxxxxxxxx> writes: > > > >> Signed-off-by: Mike Chan <mike@xxxxxxxxxxx> > >> --- > >> arch/arm/mach-omap2/powerdomain.c | 2 +- > >> 1 files changed, 1 insertions(+), 1 deletions(-) > >> > >> diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c > >> index 0334609..6077629 100644 > >> --- a/arch/arm/mach-omap2/powerdomain.c > >> +++ b/arch/arm/mach-omap2/powerdomain.c > >> @@ -90,7 +90,7 @@ static struct powerdomain *_pwrdm_deps_lookup(struct powerdomain *pwrdm, > >> if (!pwrdm || !deps || !omap_chip_is(pwrdm->omap_chip)) > >> return ERR_PTR(-EINVAL); > >> > >> - for (pd = deps; pd; pd++) { > >> + for (pd = deps; pd->pwrdm_name; pd++) { > > > > Maybe should be: > > > > for (pd = deps; pd && pd->pwrdm_name; pd++) { > > > > At the end of the list pd is a pointer to a NULL struct, so checking > if the address == NULL doesn't help here. In fact the original code > will just keep running past the struct to read who knows what in > memory. > > This case manifests itself when from clkdms_setup() when enabling auto > idle for a clock domain and the clockdomain usecount is greater than > 0. When _clkdm_add_autodeps() tries to add the a dependency that does > not exist in the powerdomain->wkdep_srcs array the for loop will run > past the wkdep_srcs array. > > Currently in linux-omap you won't hit this because the not found case > is never executed, unless you start modifying powerdomains and their > wakeup/sleep deps. > > --Mike Thanks for the patch, this is correct. But the patch also should modify: if (!pd) return ERR_PTR(-ENOENT); after the loop to be if (!pd->pwrdm_name) ... Could you revise this and resend? thanks - Paul