diff options
author | Dimitri John Ledkov <xnox@ubuntu.com> | 2018-06-26 15:38:57 +0100 |
---|---|---|
committer | Dimitri John Ledkov <xnox@ubuntu.com> | 2018-06-26 15:38:57 +0100 |
commit | 9421e599c44cd50d3df4cd019cd3c53d9320e93d (patch) | |
tree | 2d9606679ad49fbc9f9cf72b3a3a87d7a6dc8fff /super1.c | |
parent | ec9bfc63255cdf01a67171d1228f562c927c6d36 (diff) |
Cherrypick master patches up to 4th of June 2018.debian/4.1_rc1-3archive/debian/4.1_rc1-3
Diffstat (limited to 'super1.c')
-rw-r--r-- | super1.c | 22 |
1 files changed, 18 insertions, 4 deletions
@@ -1434,8 +1434,15 @@ static int update_super1(struct supertype *st, struct mdinfo *info, strcpy(sb->set_name, homehost); strcat(sb->set_name, ":"); strcat(sb->set_name, info->name); - } else - strncpy(sb->set_name, info->name, sizeof(sb->set_name)); + } else { + int namelen; + + namelen = min((int)strlen(info->name), + (int)sizeof(sb->set_name) - 1); + memcpy(sb->set_name, info->name, namelen); + memset(&sb->set_name[namelen], '\0', + sizeof(sb->set_name) - namelen); + } } else if (strcmp(update, "devicesize") == 0 && __le64_to_cpu(sb->super_offset) < __le64_to_cpu(sb->data_offset)) { @@ -1592,8 +1599,15 @@ static int init_super1(struct supertype *st, mdu_array_info_t *info, strcpy(sb->set_name, homehost); strcat(sb->set_name, ":"); strcat(sb->set_name, name); - } else - strncpy(sb->set_name, name, sizeof(sb->set_name)); + } else { + int namelen; + + namelen = min((int)strlen(name), + (int)sizeof(sb->set_name) - 1); + memcpy(sb->set_name, name, namelen); + memset(&sb->set_name[namelen], '\0', + sizeof(sb->set_name) - namelen); + } sb->ctime = __cpu_to_le64((unsigned long long)time(0)); sb->level = __cpu_to_le32(info->level); |