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....@oracle.com>
Signed-off-by: Anand Jain <anand.j...@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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to