diff options
author | Konstantin Komarov <almaz.alexandrovich@paragon-software.com> | 2023-05-08 13:32:10 +0400 |
---|---|---|
committer | Konstantin Komarov <almaz.alexandrovich@paragon-software.com> | 2023-07-03 00:21:24 +0400 |
commit | 14f527d44de632c8d1d65b42ca1bee26bc426455 (patch) | |
tree | 0dd7593b2bb638fa0419f14bc7f71eb76d3f93b1 /fs | |
parent | ea303f72d70ce2f0b0aa94ab127085289768c5a6 (diff) |
fs/ntfs3: Correct checking while generating attr_list
Correct slightly previous commit:
Enhance sanity check while generating attr_list
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ntfs3/frecord.c | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/fs/ntfs3/frecord.c b/fs/ntfs3/frecord.c index 50214b77c6a3..66f3341c65ec 100644 --- a/fs/ntfs3/frecord.c +++ b/fs/ntfs3/frecord.c @@ -813,10 +813,8 @@ int ni_create_attr_list(struct ntfs_inode *ni) * Looks like one record_size is always enough. */ le = kmalloc(al_aligned(rs), GFP_NOFS); - if (!le) { - err = -ENOMEM; - goto out; - } + if (!le) + return -ENOMEM; mi_get_ref(&ni->mi, &le->ref); ni->attr_list.le = le; @@ -865,14 +863,14 @@ int ni_create_attr_list(struct ntfs_inode *ni) if (to_free > free_b) { err = -EINVAL; - goto out1; + goto out; } } /* Allocate child MFT. */ err = ntfs_look_free_mft(sbi, &rno, is_mft, ni, &mi); if (err) - goto out1; + goto out; err = -EINVAL; /* Call mi_remove_attr() in reverse order to keep pointers 'arr_move' valid. */ @@ -884,7 +882,7 @@ int ni_create_attr_list(struct ntfs_inode *ni) attr = mi_insert_attr(mi, b->type, Add2Ptr(b, name_off), b->name_len, asize, name_off); if (!attr) - goto out1; + goto out; mi_get_ref(mi, &le_b[nb]->ref); le_b[nb]->id = attr->id; @@ -895,19 +893,19 @@ int ni_create_attr_list(struct ntfs_inode *ni) /* Remove from primary record. */ if (!mi_remove_attr(NULL, &ni->mi, b)) - goto out1; + goto out; if (to_free <= asize) break; to_free -= asize; if (!nb) - goto out1; + goto out; } attr = mi_insert_attr(&ni->mi, ATTR_LIST, NULL, 0, lsize + SIZEOF_RESIDENT, SIZEOF_RESIDENT); if (!attr) - goto out1; + goto out; attr->non_res = 0; attr->flags = 0; @@ -921,16 +919,13 @@ int ni_create_attr_list(struct ntfs_inode *ni) ni->attr_list.dirty = false; mark_inode_dirty(&ni->vfs_inode); - goto out; + return 0; -out1: +out: kfree(ni->attr_list.le); ni->attr_list.le = NULL; ni->attr_list.size = 0; return err; - -out: - return 0; } /* |