Re: FAILED: patch "[PATCH] ext4: fix deadlock allocating crypto bounce page from mempool" failed to apply to 4.19-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Feb 09, 2020 at 10:57:57AM -0500, Sasha Levin wrote:
> On Sun, Feb 09, 2020 at 12:26:01PM +0100, gregkh@xxxxxxxxxxxxxxxxxxx wrote:
> > 
> > The patch below does not apply to the 4.19-stable tree.
> > If someone wants it applied there, or to any other stable or longterm
> > tree, then please email the backport, including the original git commit
> > id to <stable@xxxxxxxxxxxxxxx>.
> > 
> > thanks,
> > 
> > greg k-h
> > 
> > ------------------ original commit in Linus's tree ------------------
> > 
> > > From 547c556f4db7c09447ecf5f833ab6aaae0c5ab58 Mon Sep 17 00:00:00 2001
> > From: Eric Biggers <ebiggers@xxxxxxxxxx>
> > Date: Tue, 31 Dec 2019 12:11:49 -0600
> > Subject: [PATCH] ext4: fix deadlock allocating crypto bounce page from mempool
> > 
> > ext4_writepages() on an encrypted file has to encrypt the data, but it
> > can't modify the pagecache pages in-place, so it encrypts the data into
> > bounce pages and writes those instead.  All bounce pages are allocated
> > from a mempool using GFP_NOFS.
> > 
> > This is not correct use of a mempool, and it can deadlock.  This is
> > because GFP_NOFS includes __GFP_DIRECT_RECLAIM, which enables the "never
> > fail" mode for mempool_alloc() where a failed allocation will fall back
> > to waiting for one of the preallocated elements in the pool.
> > 
> > But since this mode is used for all a bio's pages and not just the
> > first, it can deadlock waiting for pages already in the bio to be freed.
> > 
> > This deadlock can be reproduced by patching mempool_alloc() to pretend
> > that pool->alloc() always fails (so that it always falls back to the
> > preallocations), and then creating an encrypted file of size > 128 KiB.
> > 
> > Fix it by only using GFP_NOFS for the first page in the bio.  For
> > subsequent pages just use GFP_NOWAIT, and if any of those fail, just
> > submit the bio and start a new one.
> > 
> > This will need to be fixed in f2fs too, but that's less straightforward.
> > 
> > Fixes: c9af28fdd449 ("ext4 crypto: don't let data integrity writebacks fail with ENOMEM")
> > Cc: stable@xxxxxxxxxxxxxxx
> > Signed-off-by: Eric Biggers <ebiggers@xxxxxxxxxx>
> > Link: https://lore.kernel.org/r/20191231181149.47619-1-ebiggers@xxxxxxxxxx
> > Signed-off-by: Theodore Ts'o <tytso@xxxxxxx>
> 
> I've worked around not having these patches:
> 
> 592ddec7578a ("ext4: use IS_ENCRYPTED() to check encryption status")
> 53bc1d854c64 ("fscrypt: support encrypting multiple filesystem blocks per page")
> d2d0727b1654 ("fscrypt: simplify bounce page handling")
> 
> And queued the backport to 4.19-4.4.

Thanks for fixing this up, and the other ones.

greg k-h



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux