Skip to content

Commit 044e2e2

Browse files
committed
udf: Avoid accessing uninitialized data on failed inode read
When we fail to read inode, some data accessed in udf_evict_inode() may be uninitialized. Move the accesses to !is_bad_inode() branch. Reported-by: [email protected] Signed-off-by: Jan Kara <[email protected]>
1 parent 3d3dc27 commit 044e2e2

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

fs/udf/inode.c

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -139,21 +139,24 @@ void udf_evict_inode(struct inode *inode)
139139
struct udf_inode_info *iinfo = UDF_I(inode);
140140
int want_delete = 0;
141141

142-
if (!inode->i_nlink && !is_bad_inode(inode)) {
143-
want_delete = 1;
144-
udf_setsize(inode, 0);
145-
udf_update_inode(inode, IS_SYNC(inode));
142+
if (!is_bad_inode(inode)) {
143+
if (!inode->i_nlink) {
144+
want_delete = 1;
145+
udf_setsize(inode, 0);
146+
udf_update_inode(inode, IS_SYNC(inode));
147+
}
148+
if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB &&
149+
inode->i_size != iinfo->i_lenExtents) {
150+
udf_warn(inode->i_sb,
151+
"Inode %lu (mode %o) has inode size %llu different from extent length %llu. Filesystem need not be standards compliant.\n",
152+
inode->i_ino, inode->i_mode,
153+
(unsigned long long)inode->i_size,
154+
(unsigned long long)iinfo->i_lenExtents);
155+
}
146156
}
147157
truncate_inode_pages_final(&inode->i_data);
148158
invalidate_inode_buffers(inode);
149159
clear_inode(inode);
150-
if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB &&
151-
inode->i_size != iinfo->i_lenExtents) {
152-
udf_warn(inode->i_sb, "Inode %lu (mode %o) has inode size %llu different from extent length %llu. Filesystem need not be standards compliant.\n",
153-
inode->i_ino, inode->i_mode,
154-
(unsigned long long)inode->i_size,
155-
(unsigned long long)iinfo->i_lenExtents);
156-
}
157160
kfree(iinfo->i_ext.i_data);
158161
iinfo->i_ext.i_data = NULL;
159162
udf_clear_extent_cache(inode);

0 commit comments

Comments
 (0)