提交 61057764 编写于 作者: D Domenico Andreoli 提交者: Cheng Jian

hibernate: Allow uswsusp to write to swap

mainline inclusion
from mainline-5.7-rc1
commit 56939e01
category: bugfix
bugzilla: 50612
CVE: NA
---------------------------

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: dc617f29 ("vfs: don't allow writes to swap files")
Reported-by: NDomenico Andreoli <domenico.andreoli@linux.com>
Reported-by: NMarian Klein <mkleinsoft@gmail.com>
Signed-off-by: NDomenico Andreoli <domenico.andreoli@linux.com>
Reviewed-by: NDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: NDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Nzhangyi (F) <yi.zhang@huawei.com>
Reviewed-by: NYang Erkun <yangerkun@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
Signed-off-by: NCheng Jian <cj.chengjian@huawei.com>
上级 70d7dd5d
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <linux/task_io_accounting_ops.h> #include <linux/task_io_accounting_ops.h>
#include <linux/falloc.h> #include <linux/falloc.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <linux/suspend.h>
#include "internal.h" #include "internal.h"
struct bdev_inode { struct bdev_inode {
...@@ -2007,7 +2008,8 @@ ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from) ...@@ -2007,7 +2008,8 @@ ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from)
if (bdev_read_only(I_BDEV(bd_inode))) if (bdev_read_only(I_BDEV(bd_inode)))
return -EPERM; return -EPERM;
if (IS_SWAPFILE(bd_inode)) /* uswsusp needs write permission to the swap */
if (IS_SWAPFILE(bd_inode) && !hibernation_available())
return -ETXTBSY; return -ETXTBSY;
if (!iov_iter_count(from)) if (!iov_iter_count(from))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册