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-Url: https://git.stricted.de/?a=commitdiff_plain;h=c6e83cac3eda5f7dd32ee1453df2f7abb5c6cd46;p=GitHub%2FLineageOS%2Fandroid_kernel_motorola_exynos9610.git PM / Domains: Fix unsafe iteration over modified list of device links 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)") Cc: 3.1+ # 3.1+ Signed-off-by: Krzysztof Kozlowski Acked-by: Ulf Hansson Signed-off-by: Rafael J. Wysocki --- diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index b8d7907ee101..048dc74e3d72 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -1446,7 +1446,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)) @@ -1462,7 +1462,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;