Patch "Fix use after free in get_tree_bdev()" has been added to the 5.6-stable tree

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

 



This is a note to let you know that I've just added the patch titled

    Fix use after free in get_tree_bdev()

to the 5.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     fix-use-after-free-in-get_tree_bdev.patch
and it can be found in the queue-5.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 951da13ed25d48aa5b7437146e9bbdb66d957322
Author: David Howells <dhowells@xxxxxxxxxx>
Date:   Tue Apr 28 21:27:48 2020 +0100

    Fix use after free in get_tree_bdev()
    
    commit dd7bc8158b413e0b580c491e8bd18cb91057c7c2 upstream.
    
    Commit 6fcf0c72e4b9, a fix to get_tree_bdev() put a missing blkdev_put() in
    the wrong place, before a warnf() that displays the bdev under
    consideration rather after it.
    
    This results in a silent lockup in printk("%pg") called via warnf() from
    get_tree_bdev() under some circumstances when there's a race with the
    blockdev being frozen.  This can be caused by xfstests/tests/generic/085 in
    combination with Lukas Czerner's ext4 mount API conversion patchset.  It
    looks like it ought to occur with other users of get_tree_bdev() such as
    XFS, but apparently doesn't.
    
    Fix this by switching the order of the lines.
    
    Fixes: 6fcf0c72e4b9 ("vfs: add missing blkdev_put() in get_tree_bdev()")
    Reported-by: Lukas Czerner <lczerner@xxxxxxxxxx>
    Signed-off-by: David Howells <dhowells@xxxxxxxxxx>
    cc: Ian Kent <raven@xxxxxxxxxx>
    cc: Al Viro <viro@xxxxxxxxxxxxxxxxxx>
    Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>

diff --git a/fs/super.c b/fs/super.c
index cd352530eca90..a288cd60d2aed 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -1302,8 +1302,8 @@ int get_tree_bdev(struct fs_context *fc,
 	mutex_lock(&bdev->bd_fsfreeze_mutex);
 	if (bdev->bd_fsfreeze_count > 0) {
 		mutex_unlock(&bdev->bd_fsfreeze_mutex);
-		blkdev_put(bdev, mode);
 		warnf(fc, "%pg: Can't mount, blockdev is frozen", bdev);
+		blkdev_put(bdev, mode);
 		return -EBUSY;
 	}
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux