• D
    PM: hibernate: Restrict writes to the resume device · ad1e4f74
    Domenico Andreoli 提交于
    Hibernation via snapshot device requires write permission to the swap
    block device, the one that more often (but not necessarily) is used to
    store the hibernation image.
    
    With this patch, such permissions are granted iff:
    
     1) snapshot device config option is enabled
     2) swap partition is used as resume device
    
    In other circumstances the swap device is not writable from userspace.
    
    In order to achieve this, every write attempt to a swap device is
    checked against the device configured as part of the uswsusp API [0]
    using a pointer to the inode struct in memory. If the swap device being
    written was not configured for resuming, the write request is denied.
    
    NOTE: this implementation works only for swap block devices, where the
    inode configured by swapon (which sets S_SWAPFILE) is the same used
    by SNAPSHOT_SET_SWAP_AREA.
    
    In case of swap file, SNAPSHOT_SET_SWAP_AREA indeed receives the inode
    of the block device containing the filesystem where the swap file is
    located (+ offset in it) which is never passed to swapon and then has
    not set S_SWAPFILE.
    
    As result, the swap file itself (as a file) has never an option to be
    written from userspace. Instead it remains writable if accessed directly
    from the containing block device, which is always writeable from root.
    
    [0] Documentation/power/userland-swsusp.rst
    
    v2:
     - rename is_hibernate_snapshot_dev() to is_hibernate_resume_dev()
     - fix description so to correctly refer to the resume device
    Signed-off-by: NDomenico Andreoli <domenico.andreoli@linux.com>
    Acked-by: NDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
    ad1e4f74
block_dev.c 57.4 KB