From: Krzysztof Kozlowski Date: Wed, 28 Jun 2017 14:56:18 +0000 (+0200) Subject: PM / Domains: Fix unsafe iteration over modified list of device links X-Git-Tag: C0P2-H0.0--20200415~8107 X-Git-Url: https://git.somdevices.com/?a=commitdiff_plain;h=b87a32175a22fae2b15750477c1397970deafd68;p=linux.git PM / Domains: Fix unsafe iteration over modified list of device links commit c6e83cac3eda5f7dd32ee1453df2f7abb5c6cd46 upstream. pm_genpd_remove_subdomain() iterates over domain's master_links list and removes matching element thus it has to use safe version of list iteration. Fixes: f721889ff65a ("PM / Domains: Support for generic I/O PM domains (v8)") Signed-off-by: Krzysztof Kozlowski Acked-by: Ulf Hansson Signed-off-by: Rafael J. Wysocki Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index e023066e4215..7704ae7f1565 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -1244,7 +1244,7 @@ EXPORT_SYMBOL_GPL(pm_genpd_add_subdomain); int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd, struct generic_pm_domain *subdomain) { - struct gpd_link *link; + struct gpd_link *l, *link; int ret = -EINVAL; if (IS_ERR_OR_NULL(genpd) || IS_ERR_OR_NULL(subdomain)) @@ -1260,7 +1260,7 @@ int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd, goto out; } - list_for_each_entry(link, &genpd->master_links, master_node) { + list_for_each_entry_safe(link, l, &genpd->master_links, master_node) { if (link->slave != subdomain) continue;