Patch "hfs: add missing clean-up in hfs_fill_super" has been added to the 4.4-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

    hfs: add missing clean-up in hfs_fill_super

to the 4.4-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:
     hfs-add-missing-clean-up-in-hfs_fill_super.patch
and it can be found in the queue-4.4 subdirectory.

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



commit 5ac03887a5d4081b84e7fa7104afa52e930e694a
Author: Desmond Cheong Zhi Xi <desmondcheongzx@xxxxxxxxx>
Date:   Wed Jul 14 21:27:01 2021 -0700

    hfs: add missing clean-up in hfs_fill_super
    
    [ Upstream commit 16ee572eaf0d09daa4c8a755fdb71e40dbf8562d ]
    
    Patch series "hfs: fix various errors", v2.
    
    This series ultimately aims to address a lockdep warning in
    hfs_find_init reported by Syzbot [1].
    
    The work done for this led to the discovery of another bug, and the
    Syzkaller repro test also reveals an invalid memory access error after
    clearing the lockdep warning.  Hence, this series is broken up into
    three patches:
    
    1. Add a missing call to hfs_find_exit for an error path in
       hfs_fill_super
    
    2. Fix memory mapping in hfs_bnode_read by fixing calls to kmap
    
    3. Add lock nesting notation to tell lockdep that the observed locking
       hierarchy is safe
    
    This patch (of 3):
    
    Before exiting hfs_fill_super, the struct hfs_find_data used in
    hfs_find_init should be passed to hfs_find_exit to be cleaned up, and to
    release the lock held on the btree.
    
    The call to hfs_find_exit is missing from an error path.  We add it back
    in by consolidating calls to hfs_find_exit for error paths.
    
    Link: https://syzkaller.appspot.com/bug?id=f007ef1d7a31a469e3be7aeb0fde0769b18585db [1]
    Link: https://lkml.kernel.org/r/20210701030756.58760-1-desmondcheongzx@xxxxxxxxx
    Link: https://lkml.kernel.org/r/20210701030756.58760-2-desmondcheongzx@xxxxxxxxx
    Signed-off-by: Desmond Cheong Zhi Xi <desmondcheongzx@xxxxxxxxx>
    Reviewed-by: Viacheslav Dubeyko <slava@xxxxxxxxxxx>
    Cc: Gustavo A. R. Silva <gustavoars@xxxxxxxxxx>
    Cc: Al Viro <viro@xxxxxxxxxxxxxxxxxx>
    Cc: Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx>
    Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/hfs/super.c b/fs/hfs/super.c
index 4574fdd3d421..3eb815bb2c78 100644
--- a/fs/hfs/super.c
+++ b/fs/hfs/super.c
@@ -426,14 +426,12 @@ static int hfs_fill_super(struct super_block *sb, void *data, int silent)
 	if (!res) {
 		if (fd.entrylength > sizeof(rec) || fd.entrylength < 0) {
 			res =  -EIO;
-			goto bail;
+			goto bail_hfs_find;
 		}
 		hfs_bnode_read(fd.bnode, &rec, fd.entryoffset, fd.entrylength);
 	}
-	if (res) {
-		hfs_find_exit(&fd);
-		goto bail_no_root;
-	}
+	if (res)
+		goto bail_hfs_find;
 	res = -EINVAL;
 	root_inode = hfs_iget(sb, &fd.search_key->cat, &rec);
 	hfs_find_exit(&fd);
@@ -449,6 +447,8 @@ static int hfs_fill_super(struct super_block *sb, void *data, int silent)
 	/* everything's okay */
 	return 0;
 
+bail_hfs_find:
+	hfs_find_exit(&fd);
 bail_no_root:
 	pr_err("get root inode failed\n");
 bail:



[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