vfs: partially revert "don't allow writes to swap files"
Subsystems (5)
PATCH 1/1 vfs: partially revert "don't allow writes to swap files"
From: Darrick J. Wong <[email protected]>
In commit dc617f29dbe5 we tried to prevent userspace programs from writing to active swap devices. However, it turns out that userspace hibernation requires the ability to write the hibernation image to a swap device, so revert the write path checks.
--- fs/block_dev.c | 3 --- mm/filemap.c | 3 --- mm/memory.c | 4 ---- mm/mmap.c | 8 ++------ 4 files changed, 2 insertions(+), 16 deletions(-)
fs/block_dev.c +0 -3
@@ -2001,9 +2001,6 @@ 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)) -return -ETXTBSY ; -if (!iov_iter_count (from))return 0 ;
mm/filemap.c +0 -3
@@ -2920,9 +2920,6 @@ inline ssize_t generic_write_checks(struct kiocb *iocb, struct iov_iter *from)loff_t count;int ret; -if (IS_SWAPFILE (inode)) -return -ETXTBSY ; -if (!iov_iter_count (from))return 0 ;
mm/memory.c +0 -4
@@ -2357,10 +2357,6 @@ static vm_fault_t do_page_mkwrite(struct vm_fault *vmf) vmf->flags =FAULT_FLAG_WRITE |FAULT_FLAG_MKWRITE ; -if (vmf->vma->vm_file && -IS_SWAPFILE (vmf->vma->vm_file->f_mapping->host)) -return VM_FAULT_SIGBUS ; - ret = vmf->vma->vm_ops->page_mkwrite (vmf);/* Restore original flags so that caller is not surprised */ vmf->flags = old_flags;
mm/mmap.c +2 -6
@@ -1461,12 +1461,8 @@ unsigned long do_mmap(struct file *file, unsigned long addr,case MAP_SHARED_VALIDATE :if (flags & ~flags_mask)return -EOPNOTSUPP ; -if (prot &PROT_WRITE ) { -if (!(file->f_mode &FMODE_WRITE )) -return -EACCES ; -if (IS_SWAPFILE (file->f_mapping->host)) -return -ETXTBSY ; - } +if ((prot&PROT_WRITE ) && !(file->f_mode&FMODE_WRITE )) +return -EACCES ;/* * Make sure we don't allow writing to an append-only
Quoted 11 lines · Darrick J. Wong
From: Darrick J. Wong <[email protected]>
In commit
dc617f29dbe5we tried to prevent userspace programs from writing to active swap devices. However, it turns out that userspace hibernation requires the ability to write the hibernation image to a swap device, so revert the write path checks.Fixes dc617f29dbe5 ("vfs: don't allow writes to swap files")Reported-by Domenico Andreoli <[email protected]>Reported-by Marian Klein <[email protected]>Signed-off-by Darrick J. Wong <[email protected]>
self-NAK, Domenico Andreoli has taken this on. Andrew, could you please drop this patch from your queue?
--D
Quoted 69 lines
--- fs/block_dev.c | 3 --- mm/filemap.c | 3 --- mm/memory.c | 4 ---- mm/mmap.c | 8 ++------ 4 files changed, 2 insertions(+), 16 deletions(-)fs/block_dev.c +0
-3@@ -2001,9 +2001,6 @@ 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)) -return -ETXTBSY ; -if (!iov_iter_count (from))return 0 ;mm/filemap.c +0
-3@@ -2920,9 +2920,6 @@ inline ssize_t generic_write_checks(struct kiocb *iocb, struct iov_iter *from)loff_t count;int ret; -if (IS_SWAPFILE (inode)) -return -ETXTBSY ; -if (!iov_iter_count (from))return 0 ;mm/memory.c +0
-4@@ -2357,10 +2357,6 @@ static vm_fault_t do_page_mkwrite(struct vm_fault *vmf) vmf->flags =FAULT_FLAG_WRITE |FAULT_FLAG_MKWRITE ; -if (vmf->vma->vm_file && -IS_SWAPFILE (vmf->vma->vm_file->f_mapping->host)) -return VM_FAULT_SIGBUS ; - ret = vmf->vma->vm_ops->page_mkwrite (vmf);/* Restore original flags so that caller is not surprised */ vmf->flags = old_flags;mm/mmap.c +2
-6@@ -1461,12 +1461,8 @@ unsigned long do_mmap(struct file *file, unsigned long addr,case MAP_SHARED_VALIDATE :if (flags & ~flags_mask)return -EOPNOTSUPP ; -if (prot &PROT_WRITE ) { -if (!(file->f_mode &FMODE_WRITE )) -return -EACCES ; -if (IS_SWAPFILE (file->f_mapping->host)) -return -ETXTBSY ; - } +if ((prot&PROT_WRITE ) && !(file->f_mode&FMODE_WRITE )) +return -EACCES ;/* * Make sure we don't allow writing to an append-only