shithub: lwext4

Download patch

ref: 1aa974054274a4f59dfa59c88bb9a85461eca113
parent: dc0347cc9b3ea74da062c553dbcdc541c030f114
author: rajeshvenkataraman <rajesh_venkataraman@trimble.com>
date: Sun Sep 23 03:49:30 EDT 2018

ext4_dir: fix non existing entry creation issue

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.

--- a/include/ext4_dir_idx.h
+++ b/include/ext4_dir_idx.h
@@ -91,7 +91,7 @@
  * @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
--- a/src/ext4_dir.c
+++ b/src/ext4_dir.c
@@ -351,7 +351,7 @@
 	/* 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) {
--- a/src/ext4_dir_idx.c
+++ b/src/ext4_dir_idx.c
@@ -1230,7 +1230,7 @@
 }
 
 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;
@@ -1257,7 +1257,6 @@
 	}
 
 	/* 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) {