hfsplus: fix NULL dereference in hfsplus_lookup()
Subsystems (2)
PATCH v2 1/1 hfsplus: fix NULL dereference in hfsplus_lookup()
An HFS+ filesystem can be mounted read-only without having a metadata directory, which is needed to support hardlinks. But if the catalog data is corrupted, a directory lookup may still find dentries claiming to be hardlinks.
hfsplus_lookup() does check that ->hidden_dir is not NULL in such a situation, but mistakenly does so after dereferencing it for the first time. Reorder this check to prevent a crash.
Reported-by Wen Xu <[email protected]>
Signed-off-by Ernesto A. Fernández <[email protected]>
--- fs/hfsplus/dir.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/hfsplus/dir.c +2 -2
@@ -78,13 +78,13 @@ static struct dentry *hfsplus_lookup(struct inode *dir, struct dentry *dentry,cpu_to_be32 (HFSP_HARDLINK_TYPE ) && entry.file.user_info.fdCreator ==cpu_to_be32 (HFSP_HFSPLUS_CREATOR ) && +HFSPLUS_SB (sb)->hidden_dir && (entry.file.create_date ==HFSPLUS_I (HFSPLUS_SB (sb)->hidden_dir)-> create_date || entry.file.create_date ==HFSPLUS_I (d_inode (sb->s_root))-> - create_date) && - HFSPLUS_SB(sb)->hidden_dir) { + create_date)) { struct qstr str;char name[32 ];
Signature · 1 line
2.11.0