Jeff Liu
2012-Dec-17 11:35 UTC
[PATCH V5 3/4] Btrfs-progs: Fix set_label_unmounted() with label length validation
Currently, we keeping silent if the label length is exceeding BTRFS_LABEL_SIZE -
1, and just
truncating the characters beyond that.
This patch make it return error and exit in this situation.
Signed-off-by: Jie Liu <jeff.liu@oracle.com>
Signed-off-by: Anand Jain <anand.jain@oracle.com>
---
btrfslabel.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/btrfslabel.c b/btrfslabel.c
index 938e8b4..2826050 100644
--- a/btrfslabel.c
+++ b/btrfslabel.c
@@ -63,6 +63,12 @@ static int set_label_unmounted(const char *dev, const char
*label)
return -1;
}
+ if (strlen(label) > BTRFS_LABEL_SIZE - 1) {
+ fprintf(stderr, "ERROR: Label %s is too long (max %d)\n",
+ label, BTRFS_LABEL_SIZE - 1);
+ return -1;
+ }
+
/* Open the super_block at the default location
* and as read-write.
*/
@@ -71,8 +77,8 @@ static int set_label_unmounted(const char *dev, const char
*label)
return -1;
trans = btrfs_start_transaction(root, 1);
- strncpy(root->fs_info->super_copy.label, label, BTRFS_LABEL_SIZE);
- root->fs_info->super_copy.label[BTRFS_LABEL_SIZE-1] = 0;
+ snprintf(root->fs_info->super_copy.label, BTRFS_LABEL_SIZE,
"%s",
+ label);
btrfs_commit_transaction(trans, root);
/* Now we close it since we are done. */
--
1.7.9.5
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs"
in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html