From: Jeff Liu Date: Mon, 17 Dec 2012 11:35:27 +0000 (+0000) Subject: Btrfs-progs: Fix set_label_unmounted() with label length validation X-Git-Tag: upstream/4.16.1~3433 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3988e807025b6f2a0b2d26d21bdbfecf29f0aecb;p=platform%2Fupstream%2Fbtrfs-progs.git 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 Signed-off-by: Anand Jain --- diff --git a/btrfslabel.c b/btrfslabel.c index 7aea996..dcc776e 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. */