diff options
| author | David Carlier <devnexen@gmail.com> | 2026-04-30 20:56:51 +0100 |
|---|---|---|
| committer | Andrew Morton <akpm@linux-foundation.org> | 2026-10-08 23:06:31 -0700 |
| commit | 634cbf5b794b734c78631b92e381cfc85f357bbe (patch) | |
| tree | cb1aa107912487465241996a78cc6fb5939fd9f0 /scripts/checkstack.pl | |
| parent | 7fea65044f62933615c84d4b943fef67856a8022 (diff) | |
| download | linux-next-634cbf5b794b734c78631b92e381cfc85f357bbe.tar.gz linux-next-634cbf5b794b734c78631b92e381cfc85f357bbe.zip | |
mm/swap, PM: hibernate: atomically replace hibernation pin
snapshot_set_swap_area() unpins the previously selected swap device and
pins the new one in two separate swap_lock critical sections. In the gap
between them, swapoff() observes SWP_HIBERNATION cleared, bypasses the
guard, and tears down the device, reopening the race the SWP_HIBERNATION
pin was meant to close. The window is reachable on any
SNAPSHOT_SET_SWAP_AREA call after the snapshot device is opened for
hibernation, and on any retry after the resume path's first selection.
Add repin_hibernation_swap_type(), which looks up the new device, clears
the old SWP_HIBERNATION flag and sets the new one under a single swap_lock
acquisition. The same-device case is short- circuited so userspace can
re-select the same swap area without tripping WARN_ON_ONCE and -EBUSY.
Switch snapshot_set_swap_area() to the new helper.
A failed lookup now preserves the previous pin instead of dropping it, so
a bad SNAPSHOT_SET_SWAP_AREA leaves the prior selection intact. The open
and release paths keep using pin_hibernation_swap_type() and
unpin_hibernation_swap_type().
The race was identified during AI-assisted review of the SWP_HIBERNATION
pinning series.
[akpm@linux-foundation.org: coding-style cleanups]
Link: https://lore.kernel.org/20260430195651.287659-1-devnexen@gmail.com
Fixes: 8e6e0d845823 ("mm/swap, PM: hibernate: fix swapoff race in uswsusp by pinning swap device")
Signed-off-by: David Carlier <devnexen@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Assisted-by: Codex (gpt-5-codex)
Cc: Baoquan He <bhe@redhat.com>
Cc: Barry Song <baohua@kernel.org>
Cc: Chris Li <chrisl@kernel.org>
Cc: Kairui Song <kasong@tencent.com>
Cc: Kemeng Shi <shikemeng@huaweicloud.com>
Cc: Len Brown <lenb@kernel.org>
Cc: Nhat Pham <nphamcs@gmail.com>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>
Cc: DaeMyung Kang <charsyam@gmail.com>
Cc: Youngjun Park <youngjun.park@lge.com>
Diffstat (limited to 'scripts/checkstack.pl')
0 files changed, 0 insertions, 0 deletions
