Commit f05f2429 authored by Jan Kara's avatar Jan Kara

udf: Fix error handling in udf_new_inode()

When memory allocation of iinfo or block allocation fails, already
allocated struct udf_inode_info gets freed with iput() and
udf_evict_inode() may look at inode fields which are not properly
initialized. Fix it by marking inode bad before dropping reference to it
in udf_new_inode().

Reported-by: syzbot+9ca499bb57a2b9e4c652@syzkaller.appspotmail.com
Signed-off-by: default avatarJan Kara <jack@suse.cz>
parent b831281b
...@@ -77,6 +77,7 @@ struct inode *udf_new_inode(struct inode *dir, umode_t mode) ...@@ -77,6 +77,7 @@ struct inode *udf_new_inode(struct inode *dir, umode_t mode)
GFP_KERNEL); GFP_KERNEL);
} }
if (!iinfo->i_data) { if (!iinfo->i_data) {
make_bad_inode(inode);
iput(inode); iput(inode);
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
} }
...@@ -86,6 +87,7 @@ struct inode *udf_new_inode(struct inode *dir, umode_t mode) ...@@ -86,6 +87,7 @@ struct inode *udf_new_inode(struct inode *dir, umode_t mode)
dinfo->i_location.partitionReferenceNum, dinfo->i_location.partitionReferenceNum,
start, &err); start, &err);
if (err) { if (err) {
make_bad_inode(inode);
iput(inode); iput(inode);
return ERR_PTR(err); return ERR_PTR(err);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment