Skip to content

Commit

Permalink
ext4_dir: fix non existing entry creation issue
Browse files Browse the repository at this point in the history
Added the length of the name string a a parameter.
Using strlen() on the name string may not give the correct length
in case of paths like: /mountpoint/nonexistdir1/nonexistdir2.
  • Loading branch information
rajeshvenkataraman authored and gkostka committed Sep 26, 2018
1 parent dc0347c commit 1aa9740
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 4 deletions.
2 changes: 1 addition & 1 deletion include/ext4_dir_idx.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ int ext4_dir_dx_find_entry(struct ext4_dir_search_result *result,
* @return Error code
*/
int ext4_dir_dx_add_entry(struct ext4_inode_ref *parent,
struct ext4_inode_ref *child, const char *name);
struct ext4_inode_ref *child, const char *name, uint32_t name_len);

/**@brief Add new entry to indexed directory
* @param dir Directory i-node
Expand Down
2 changes: 1 addition & 1 deletion src/ext4_dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ int ext4_dir_add_entry(struct ext4_inode_ref *parent, const char *name,
/* Index adding (if allowed) */
if ((ext4_sb_feature_com(sb, EXT4_FCOM_DIR_INDEX)) &&
(ext4_inode_has_flag(parent->inode, EXT4_INODE_FLAG_INDEX))) {
r = ext4_dir_dx_add_entry(parent, child, name);
r = ext4_dir_dx_add_entry(parent, child, name, name_len);

/* Check if index is not corrupted */
if (r != EXT4_ERR_BAD_DX_DIR) {
Expand Down
3 changes: 1 addition & 2 deletions src/ext4_dir_idx.c
Original file line number Diff line number Diff line change
Expand Up @@ -1230,7 +1230,7 @@ ext4_dir_dx_split_index(struct ext4_inode_ref *ino_ref,
}

int ext4_dir_dx_add_entry(struct ext4_inode_ref *parent,
struct ext4_inode_ref *child, const char *name)
struct ext4_inode_ref *child, const char *name, uint32_t name_len)
{
int rc2 = EOK;
int r;
Expand All @@ -1257,7 +1257,6 @@ int ext4_dir_dx_add_entry(struct ext4_inode_ref *parent,
}

/* Initialize hinfo structure (mainly compute hash) */
uint32_t name_len = strlen(name);
struct ext4_hash_info hinfo;
r = ext4_dir_hinfo_init(&hinfo, &root_blk, &fs->sb, name_len, name);
if (r != EOK) {
Expand Down

0 comments on commit 1aa9740

Please sign in to comment.