summaryrefslogtreecommitdiff
path: root/libparted
diff options
context:
space:
mode:
authorBrian C. Lane <bcl@redhat.com>2018-07-23 14:34:30 -0700
committerBrian C. Lane <bcl@redhat.com>2018-08-22 11:37:09 -0700
commit60906f5674ca32ddfaf8c18fe2e4ebe510dbbd6f (patch)
tree82960cc2fb2322a3593bd384b84ae8c610d75c04 /libparted
parent554d54cf7dbed387ace44a733c535c08d645bf9a (diff)
downloadparted-60906f5674ca32ddfaf8c18fe2e4ebe510dbbd6f.tar.gz
Fix the length of several strncpy calls
These need to be 1 less than the allocated size of the buffer, strncpy will fill shorter strings with zeros, but there needs to be room for at least one 0x00 at the end if the string is the same length as the buffer and has no terminating 0x00. Related: rhbz#1602652
Diffstat (limited to 'libparted')
-rw-r--r--libparted/arch/linux.c12
-rw-r--r--libparted/labels/mac.c9
2 files changed, 14 insertions, 7 deletions
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
index 7e86b51..4c778ea 100644
--- a/libparted/arch/linux.c
+++ b/libparted/arch/linux.c
@@ -2582,9 +2582,12 @@ _blkpg_add_partition (PedDisk* disk, const PedPartition *part)
linux_part.length = part->geom.length * disk->dev->sector_size;
}
linux_part.pno = part->num;
- strncpy (linux_part.devname, dev_name, BLKPG_DEVNAMELTH);
- if (vol_name)
- strncpy (linux_part.volname, vol_name, BLKPG_VOLNAMELTH);
+ strncpy (linux_part.devname, dev_name, BLKPG_DEVNAMELTH-1);
+ linux_part.devname[BLKPG_DEVNAMELTH-1] = '\0';
+ if (vol_name) {
+ strncpy (linux_part.volname, vol_name, BLKPG_VOLNAMELTH-1);
+ linux_part.volname[BLKPG_VOLNAMELTH-1] = '\0';
+ }
free (dev_name);
@@ -2640,7 +2643,8 @@ static int _blkpg_resize_partition (PedDisk* disk, const PedPartition *part)
else
linux_part.length = part->geom.length * disk->dev->sector_size;
linux_part.pno = part->num;
- strncpy (linux_part.devname, dev_name, BLKPG_DEVNAMELTH);
+ strncpy (linux_part.devname, dev_name, BLKPG_DEVNAMELTH-1);
+ linux_part.devname[BLKPG_DEVNAMELTH-1] = '\0';
free (dev_name);
diff --git a/libparted/labels/mac.c b/libparted/labels/mac.c
index fa4e43f..4942c82 100644
--- a/libparted/labels/mac.c
+++ b/libparted/labels/mac.c
@@ -930,8 +930,10 @@ _generate_raw_part (PedDisk* disk, PedPartition* part,
= PED_CPU_TO_BE32 (mac_disk_data->last_part_entry_num);
part_map_entry->start_block = PED_CPU_TO_BE32 (part->geom.start);
part_map_entry->block_count = PED_CPU_TO_BE32 (part->geom.length);
- strncpy (part_map_entry->name, mac_part_data->volume_name, 32);
- strncpy (part_map_entry->type, mac_part_data->system_name, 32);
+ strncpy (part_map_entry->name, mac_part_data->volume_name, 31);
+ part_map_entry->name[31] = '\0';
+ strncpy (part_map_entry->type, mac_part_data->system_name, 31);
+ part_map_entry->type[31] = '\0';
if (mac_part_data->is_driver) {
if (mac_part_data->has_driver)
@@ -954,7 +956,8 @@ _generate_raw_part (PedDisk* disk, PedPartition* part,
part_map_entry->boot_cksum =
PED_CPU_TO_BE32 (mac_part_data->boot_checksum);
- strncpy (part_map_entry->processor, mac_part_data->processor_name, 16);
+ strncpy (part_map_entry->processor, mac_part_data->processor_name, 15);
+ part_map_entry->processor[15] = '\0';
if (!_pad_raw_part (disk, part->num, part_map))
goto error;