Skip to contentSkip to conversation

hostfs: Use kasprintf() instead of fixed buffer formatting

PATCH In review Andy Shevchenko 2 participants 3 messages Mar 20, 2020 – Mar 29, 2020 User-mode Linux (UML)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 hostfs: Use kasprintf() instead of fixed buffer formatting

Improve readability and maintainability by replacing a hardcoded string allocation and formatting by the use of the kasprintf() helper.

---
 fs/hostfs/hostfs_kern.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)
fs/hostfs/hostfs_kern.c +4 -8
index e6b8c49076bb..c070c0d8e3e9 100644
@@ -139,8 +139,8 @@ static char *inode_name(struct inode *ino)
 
 static char *follow_link(char *link)
 {
-	int len, n;
 	char *name, *resolved, *end;
+	int n;
 
 	name = __getname();
 	if (!name) {
@@ -164,15 +164,13 @@ static char *follow_link(char *link)
 		return name;
 
 	*(end + 1) = '\0';
-	len = strlen(link) + strlen(name) + 1;
 
-	resolved = kmalloc(len, GFP_KERNEL);
+	resolved = kasprintf(GFP_KERNEL, "%s%s", link, name);
 	if (resolved == NULL) {
 		n = -ENOMEM;
 		goto out_free;
 	}
 
-	sprintf(resolved, "%s%s", link, name);
 	__putname(name);
 	kfree(link);
 	return resolved;
@@ -921,18 +919,16 @@ static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent)
 	sb->s_d_op = &simple_dentry_operations;
 	sb->s_maxbytes = MAX_LFS_FILESIZE;
 
-	/* NULL is printed as <NULL> by sprintf: avoid that. */
+	/* NULL is printed as '(null)' by printf(): avoid that. */
 	if (req_root == NULL)
 		req_root = "";
 
 	err = -ENOMEM;
 	sb->s_fs_info = host_root_path =
-		kmalloc(strlen(root_ino) + strlen(req_root) + 2, GFP_KERNEL);
+		kasprintf(GFP_KERNEL, "%s/%s", root_ino, req_root);
 	if (host_root_path == NULL)
 		goto out;
 
-	sprintf(host_root_path, "%s/%s", root_ino, req_root);
-
 	root_inode = new_inode(sb);
 	if (!root_inode)
 		goto out;
Signature · 7 lines
2.25.1


_______________________________________________
linux-um mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-um
#1 lore raw
Quoted 3 lines · Andy Shevchenko

Improve readability and maintainability by replacing a hardcoded string allocation and formatting by the use of the kasprintf() helper.

Any comments so far?

Quoted 60 lines
---
 fs/hostfs/hostfs_kern.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)
fs/hostfs/hostfs_kern.c +4 -8
index e6b8c49076bb..c070c0d8e3e9 100644
@@ -139,8 +139,8 @@ static char *inode_name(struct inode *ino)
 
 static char *follow_link(char *link)
 {
-	int len, n;
 	char *name, *resolved, *end;
+	int n;
 
 	name = __getname();
 	if (!name) {
@@ -164,15 +164,13 @@ static char *follow_link(char *link)
 		return name;
 
 	*(end + 1) = '\0';
-	len = strlen(link) + strlen(name) + 1;
 
-	resolved = kmalloc(len, GFP_KERNEL);
+	resolved = kasprintf(GFP_KERNEL, "%s%s", link, name);
 	if (resolved == NULL) {
 		n = -ENOMEM;
 		goto out_free;
 	}
 
-	sprintf(resolved, "%s%s", link, name);
 	__putname(name);
 	kfree(link);
 	return resolved;
@@ -921,18 +919,16 @@ static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent)
 	sb->s_d_op = &simple_dentry_operations;
 	sb->s_maxbytes = MAX_LFS_FILESIZE;
 
-	/* NULL is printed as <NULL> by sprintf: avoid that. */
+	/* NULL is printed as '(null)' by printf(): avoid that. */
 	if (req_root == NULL)
 		req_root = "";
 
 	err = -ENOMEM;
 	sb->s_fs_info = host_root_path =
-		kmalloc(strlen(root_ino) + strlen(req_root) + 2, GFP_KERNEL);
+		kasprintf(GFP_KERNEL, "%s/%s", root_ino, req_root);
 	if (host_root_path == NULL)
 		goto out;
 
-	sprintf(host_root_path, "%s/%s", root_ino, req_root);
-
 	root_inode = new_inode(sb);
 	if (!root_inode)
 		goto out;
Signature · 1 line
2.25.1
Signature · 9 lines
With Best Regards,
Andy Shevchenko



_______________________________________________
linux-um mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-um
#2 lore raw
Quoted 60 lines · Andy Shevchenko
Quoted 3 lines · Andy Shevchenko

Improve readability and maintainability by replacing a hardcoded string allocation and formatting by the use of the kasprintf() helper.

Any comments so far?

Quoted 52 lines
---
 fs/hostfs/hostfs_kern.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)
fs/hostfs/hostfs_kern.c +4 -6
index e6b8c49076bb..c070c0d8e3e9 100644
@@ -139,8 +139,8 @@ static char *inode_name(struct inode *ino)
 
 static char *follow_link(char *link)
 {
-     int len, n;
      char *name, *resolved, *end;
+     int n;
 
      name = __getname();
      if (!name) {
@@ -164,15 +164,13 @@ static char *follow_link(char *link)
              return name;
 
      *(end + 1) = '\0';
-     len = strlen(link) + strlen(name) + 1;
 
-     resolved = kmalloc(len, GFP_KERNEL);
+     resolved = kasprintf(GFP_KERNEL, "%s%s", link, name);
      if (resolved == NULL) {
              n = -ENOMEM;
              goto out_free;
      }
 
-     sprintf(resolved, "%s%s", link, name);
      __putname(name);
      kfree(link);
      return resolved;
@@ -921,18 +919,16 @@ static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent)
      sb->s_d_op = &simple_dentry_operations;
      sb->s_maxbytes = MAX_LFS_FILESIZE;
 
-     /* NULL is printed as <NULL> by sprintf: avoid that. */
+     /* NULL is printed as '(null)' by printf(): avoid that. */
      if (req_root == NULL)
              req_root = "";
 
      err = -ENOMEM;
      sb->s_fs_info = host_root_path =
-             kmalloc(strlen(root_ino) + strlen(req_root) + 2, GFP_KERNEL);
+             kasprintf(GFP_KERNEL, "%s/%s", root_ino, req_root);
      if (host_root_path == NULL)
              goto out;
 
Quoted 5 lines

fs/hostfs/hostfs_kern.c static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent) · line 934

Quoted 5 lines
fs/hostfs/hostfs_kern.c +0 -2
-     sprintf(host_root_path, "%s/%s", root_ino, req_root);
-
      root_inode = new_inode(sb);
      if (!root_inode)
              goto out;

Thanks for cleaning this up! Applied.

Signature · 7 lines
Thanks,
//richard

_______________________________________________
linux-um mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-um