From: Domenico Andreoli Date: Mon, 23 Mar 2020 15:22:15 +0000 (-0700) Subject: hibernate: Allow uswsusp to write to swap X-Git-Tag: v5.7-rc1~126^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=56939e014a6c212b317414faa307029e2e80c3b9;p=thirdparty%2Fkernel%2Flinux.git hibernate: Allow uswsusp to write to swap It turns out that there is one use case for programs being able to write to swap devices, and that is the userspace hibernation code. Quick fix: disable the S_SWAPFILE check if hibernation is configured. Fixes: dc617f29dbe5 ("vfs: don't allow writes to swap files") Reported-by: Domenico Andreoli Reported-by: Marian Klein Signed-off-by: Domenico Andreoli Reviewed-by: Darrick J. Wong Signed-off-by: Darrick J. Wong --- diff --git a/fs/block_dev.c b/fs/block_dev.c index 69bf2fb6f7cda..84fe0162ff13e 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -34,6 +34,7 @@ #include #include #include +#include #include "internal.h" struct bdev_inode { @@ -2001,7 +2002,8 @@ ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from) if (bdev_read_only(I_BDEV(bd_inode))) return -EPERM; - if (IS_SWAPFILE(bd_inode)) + /* uswsusp needs write permission to the swap */ + if (IS_SWAPFILE(bd_inode) && !hibernation_available()) return -ETXTBSY; if (!iov_iter_count(from))