• Vlastimil Babka's avatar
    PM: hibernate: fix resume_store() return value when hibernation not available · df2f7cde
    Vlastimil Babka authored
    On a laptop with hibernation set up but not actively used, and with
    secure boot and lockdown enabled kernel, 6.5-rc1 gets stuck on boot with
    the following repeated messages:
    
      A start job is running for Resume from hibernation using device /dev/system/swap (24s / no limit)
      lockdown_is_locked_down: 25311154 callbacks suppressed
      Lockdown: systemd-hiberna: hibernation is restricted; see man kernel_lockdown.7
      ...
    
    Checking the resume code leads to commit cc89c63e ("PM: hibernate:
    move finding the resume device out of software_resume") which
    inadvertently changed the return value from resume_store() to 0 when
    !hibernation_available(). This apparently translates to userspace
    write() returning 0 as in number of bytes written, and userspace looping
    indefinitely in the attempt to write the intended value.
    
    Fix this by returning the full number of bytes that were to be written,
    as that's what was done before the commit.
    
    Fixes: cc89c63e ("PM: hibernate: move finding the resume device out of software_resume")
    Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    df2f7cde
hibernate.c 30.6 KB