linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] hibernate: Allow uswsusp to write to swap
@ 2020-03-04 17:06 Domenico Andreoli
  2020-03-22  7:14 ` Rafael J. Wysocki
  0 siblings, 1 reply; 5+ messages in thread
From: Domenico Andreoli @ 2020-03-04 17:06 UTC (permalink / raw)
  To: Darrick J. Wong
  Cc: Rafael J. Wysocki, Linux PM, Linux Memory Management List,
	linux-fsdevel, mkleinsoft, Christoph Hellwig, Andrew Morton,
	Rafael J. Wysocki, Len Brown, Pavel Machek

From: Domenico Andreoli <domenico.andreoli@linux.com>

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 <domenico.andreoli@linux.com>
Reported-by: Marian Klein <mkleinsoft@gmail.com>
Signed-off-by: Domenico Andreoli <domenico.andreoli@linux.com>

v2:
 - use hibernation_available() instead of IS_ENABLED(CONFIG_HIBERNATE)
 - make Fixes: point to the right commit

---
 fs/block_dev.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Index: b/fs/block_dev.c
===================================================================
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -34,6 +34,7 @@
 #include <linux/task_io_accounting_ops.h>
 #include <linux/falloc.h>
 #include <linux/uaccess.h>
+#include <linux/suspend.h>
 #include "internal.h"
 
 struct bdev_inode {
@@ -2001,7 +2002,8 @@ ssize_t blkdev_write_iter(struct kiocb *
 	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))

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] hibernate: Allow uswsusp to write to swap
  2020-03-04 17:06 [PATCH v2] hibernate: Allow uswsusp to write to swap Domenico Andreoli
@ 2020-03-22  7:14 ` Rafael J. Wysocki
  2020-03-22 11:23   ` Domenico Andreoli
  0 siblings, 1 reply; 5+ messages in thread
From: Rafael J. Wysocki @ 2020-03-22  7:14 UTC (permalink / raw)
  To: Domenico Andreoli
  Cc: Darrick J. Wong, Rafael J. Wysocki, Linux PM,
	Linux Memory Management List, linux-fsdevel, mkleinsoft,
	Christoph Hellwig, Andrew Morton, Len Brown, Pavel Machek

On Wednesday, March 4, 2020 6:06:46 PM CET Domenico Andreoli wrote:
> From: Domenico Andreoli <domenico.andreoli@linux.com>
> 
> 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 <domenico.andreoli@linux.com>
> Reported-by: Marian Klein <mkleinsoft@gmail.com>
> Signed-off-by: Domenico Andreoli <domenico.andreoli@linux.com>
> 
> v2:
>  - use hibernation_available() instead of IS_ENABLED(CONFIG_HIBERNATE)
>  - make Fixes: point to the right commit

This looks OK to me.

Has it been taken care of already, or am I expected to apply it?

> ---
>  fs/block_dev.c |    4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> Index: b/fs/block_dev.c
> ===================================================================
> --- a/fs/block_dev.c
> +++ b/fs/block_dev.c
> @@ -34,6 +34,7 @@
>  #include <linux/task_io_accounting_ops.h>
>  #include <linux/falloc.h>
>  #include <linux/uaccess.h>
> +#include <linux/suspend.h>
>  #include "internal.h"
>  
>  struct bdev_inode {
> @@ -2001,7 +2002,8 @@ ssize_t blkdev_write_iter(struct kiocb *
>  	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))
> 





^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] hibernate: Allow uswsusp to write to swap
  2020-03-22  7:14 ` Rafael J. Wysocki
@ 2020-03-22 11:23   ` Domenico Andreoli
  2020-03-23 15:21     ` Darrick J. Wong
  0 siblings, 1 reply; 5+ messages in thread
From: Domenico Andreoli @ 2020-03-22 11:23 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Darrick J. Wong, Rafael J. Wysocki, Linux PM,
	Linux Memory Management List, linux-fsdevel, mkleinsoft,
	Christoph Hellwig, Andrew Morton, Len Brown, Pavel Machek

On Sun, Mar 22, 2020 at 08:14:21AM +0100, Rafael J. Wysocki wrote:
> On Wednesday, March 4, 2020 6:06:46 PM CET Domenico Andreoli wrote:
> > From: Domenico Andreoli <domenico.andreoli@linux.com>
> > 
> > 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 <domenico.andreoli@linux.com>
> > Reported-by: Marian Klein <mkleinsoft@gmail.com>
> > Signed-off-by: Domenico Andreoli <domenico.andreoli@linux.com>
> > 
> > v2:
> >  - use hibernation_available() instead of IS_ENABLED(CONFIG_HIBERNATE)
> >  - make Fixes: point to the right commit
> 
> This looks OK to me.
> 
> Has it been taken care of already, or am I expected to apply it?

I don't know who is supposed to take it, I did not receive any notification.

> 
> > ---
> >  fs/block_dev.c |    4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> > 
> > Index: b/fs/block_dev.c
> > ===================================================================
> > --- a/fs/block_dev.c
> > +++ b/fs/block_dev.c
> > @@ -34,6 +34,7 @@
> >  #include <linux/task_io_accounting_ops.h>
> >  #include <linux/falloc.h>
> >  #include <linux/uaccess.h>
> > +#include <linux/suspend.h>
> >  #include "internal.h"
> >  
> >  struct bdev_inode {
> > @@ -2001,7 +2002,8 @@ ssize_t blkdev_write_iter(struct kiocb *
> >  	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))
> > 
> 
> 
> 
> 

-- 
rsa4096: 3B10 0CA1 8674 ACBA B4FE  FCD2 CE5B CF17 9960 DE13
ed25519: FFB4 0CC3 7F2E 091D F7DA  356E CC79 2832 ED38 CB05

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] hibernate: Allow uswsusp to write to swap
  2020-03-22 11:23   ` Domenico Andreoli
@ 2020-03-23 15:21     ` Darrick J. Wong
  2020-03-24  2:19       ` Andrew Morton
  0 siblings, 1 reply; 5+ messages in thread
From: Darrick J. Wong @ 2020-03-23 15:21 UTC (permalink / raw)
  To: Domenico Andreoli
  Cc: Rafael J. Wysocki, Rafael J. Wysocki, Linux PM,
	Linux Memory Management List, linux-fsdevel, mkleinsoft,
	Christoph Hellwig, Andrew Morton, Len Brown, Pavel Machek

On Sun, Mar 22, 2020 at 12:23:14PM +0100, Domenico Andreoli wrote:
> On Sun, Mar 22, 2020 at 08:14:21AM +0100, Rafael J. Wysocki wrote:
> > On Wednesday, March 4, 2020 6:06:46 PM CET Domenico Andreoli wrote:
> > > From: Domenico Andreoli <domenico.andreoli@linux.com>
> > > 
> > > 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 <domenico.andreoli@linux.com>
> > > Reported-by: Marian Klein <mkleinsoft@gmail.com>
> > > Signed-off-by: Domenico Andreoli <domenico.andreoli@linux.com>
> > > 
> > > v2:
> > >  - use hibernation_available() instead of IS_ENABLED(CONFIG_HIBERNATE)
> > >  - make Fixes: point to the right commit
> > 
> > This looks OK to me.
> > 
> > Has it been taken care of already, or am I expected to apply it?
> 
> I don't know who is supposed to take it, I did not receive any notification.

Hmmm.  I thought it had been picked up by akpm (see "[alternative-merged]
vfs-partially-revert-dont-allow-writes-to-swap-files.patch removed from
-mm tree" from 5 March), but it's not in mmotm now, so I'll put this in my
vfs tree for 5.7.

Also, since apparently my previous RVB apparently never made it to the
internet,

Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>

--D

> > 
> > > ---
> > >  fs/block_dev.c |    4 +++-
> > >  1 file changed, 3 insertions(+), 1 deletion(-)
> > > 
> > > Index: b/fs/block_dev.c
> > > ===================================================================
> > > --- a/fs/block_dev.c
> > > +++ b/fs/block_dev.c
> > > @@ -34,6 +34,7 @@
> > >  #include <linux/task_io_accounting_ops.h>
> > >  #include <linux/falloc.h>
> > >  #include <linux/uaccess.h>
> > > +#include <linux/suspend.h>
> > >  #include "internal.h"
> > >  
> > >  struct bdev_inode {
> > > @@ -2001,7 +2002,8 @@ ssize_t blkdev_write_iter(struct kiocb *
> > >  	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))
> > > 
> > 
> > 
> > 
> > 
> 
> -- 
> rsa4096: 3B10 0CA1 8674 ACBA B4FE  FCD2 CE5B CF17 9960 DE13
> ed25519: FFB4 0CC3 7F2E 091D F7DA  356E CC79 2832 ED38 CB05

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] hibernate: Allow uswsusp to write to swap
  2020-03-23 15:21     ` Darrick J. Wong
@ 2020-03-24  2:19       ` Andrew Morton
  0 siblings, 0 replies; 5+ messages in thread
From: Andrew Morton @ 2020-03-24  2:19 UTC (permalink / raw)
  To: Darrick J. Wong
  Cc: Domenico Andreoli, Rafael J. Wysocki, Rafael J. Wysocki,
	Linux PM, Linux Memory Management List, linux-fsdevel,
	mkleinsoft, Christoph Hellwig, Len Brown, Pavel Machek

On Mon, 23 Mar 2020 08:21:05 -0700 "Darrick J. Wong" <darrick.wong@oracle.com> wrote:

> > > Has it been taken care of already, or am I expected to apply it?
> > 
> > I don't know who is supposed to take it, I did not receive any notification.
> 
> Hmmm.  I thought it had been picked up by akpm (see "[alternative-merged]
> vfs-partially-revert-dont-allow-writes-to-swap-files.patch removed from
> -mm tree" from 5 March), but it's not in mmotm now,

oop.  Things which are advertised as "hibernate: ..." tend not to
survive my morning email triage :(

> so I'll put this in my
> vfs tree for 5.7.

Thanks.  But I assume that "it turns out that userspace hibernation
requires the ability to write the hibernation image to a swap device"
means we've regressed userspace hibernation.

So I'd say either "5.6 with a cc:stable" or "5.7-rc1 with a cc:stable"
if we're being more cautious.


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-03-24  2:19 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-04 17:06 [PATCH v2] hibernate: Allow uswsusp to write to swap Domenico Andreoli
2020-03-22  7:14 ` Rafael J. Wysocki
2020-03-22 11:23   ` Domenico Andreoli
2020-03-23 15:21     ` Darrick J. Wong
2020-03-24  2:19       ` Andrew Morton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).