summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2019-08-10 07:18:06 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2019-08-10 07:18:06 -0400
commit11f26633cccb7243217370837cbb066a73f678a5 (patch)
tree4154ca8230215200b2970375c504dfbe94cc9425
parentd19bdb876bece27187d4ffbc272672e1239cd313 (diff)
PM: suspend: Fix platform_suspend_prepare_noirq()
After commit ac9eafbe930a ("ACPI: PM: s2idle: Execute LPS0 _DSM functions with suspended devices"), a NULL pointer may be dereferenced if suspend-to-idle is attempted on a platform without "traditional" suspend support due to invalid fall-through in platform_suspend_prepare_noirq(). Fix that and while at it add missing braces in platform_resume_noirq(). Fixes: ac9eafbe930a ("ACPI: PM: s2idle: Execute LPS0 _DSM functions with suspended devices") Reported-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r--kernel/power/suspend.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
index ed9ddef12b13..f3b7239f1892 100644
--- a/kernel/power/suspend.c
+++ b/kernel/power/suspend.c
@@ -253,10 +253,10 @@ static int platform_suspend_prepare_late(suspend_state_t state)
253 253
254static int platform_suspend_prepare_noirq(suspend_state_t state) 254static int platform_suspend_prepare_noirq(suspend_state_t state)
255{ 255{
256 if (state == PM_SUSPEND_TO_IDLE) { 256 if (state == PM_SUSPEND_TO_IDLE)
257 if (s2idle_ops && s2idle_ops->prepare_late) 257 return s2idle_ops && s2idle_ops->prepare_late ?
258 return s2idle_ops->prepare_late(); 258 s2idle_ops->prepare_late() : 0;
259 } 259
260 return suspend_ops->prepare_late ? suspend_ops->prepare_late() : 0; 260 return suspend_ops->prepare_late ? suspend_ops->prepare_late() : 0;
261} 261}
262 262
@@ -265,8 +265,9 @@ static void platform_resume_noirq(suspend_state_t state)
265 if (state == PM_SUSPEND_TO_IDLE) { 265 if (state == PM_SUSPEND_TO_IDLE) {
266 if (s2idle_ops && s2idle_ops->restore_early) 266 if (s2idle_ops && s2idle_ops->restore_early)
267 s2idle_ops->restore_early(); 267 s2idle_ops->restore_early();
268 } else if (suspend_ops->wake) 268 } else if (suspend_ops->wake) {
269 suspend_ops->wake(); 269 suspend_ops->wake();
270 }
270} 271}
271 272
272static void platform_resume_early(suspend_state_t state) 273static void platform_resume_early(suspend_state_t state)