imsm: fix: prevent segfault in mark_failure
Using an array of chars without the terminating null byte as a parameter of sprintf() function causes segfault when dealing with SAS drives (with 20-digits serial number). The memcpy() function is used instead. Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
fde139b91e
commit
7d0c5e24a5
|
@ -6015,7 +6015,9 @@ static int mark_failure(struct imsm_dev *dev, struct imsm_disk *disk, int idx)
|
|||
if (is_failed(disk) && (ord & IMSM_ORD_REBUILD))
|
||||
return 0;
|
||||
|
||||
sprintf(buf, "%s:0", disk->serial);
|
||||
memcpy(buf, disk->serial, MAX_RAID_SERIAL_LEN);
|
||||
buf[MAX_RAID_SERIAL_LEN] = '\000';
|
||||
strcat(buf, ":0");
|
||||
if ((len = strlen(buf)) >= MAX_RAID_SERIAL_LEN)
|
||||
shift = len - MAX_RAID_SERIAL_LEN + 1;
|
||||
strncpy((char *)disk->serial, &buf[shift], MAX_RAID_SERIAL_LEN);
|
||||
|
|
Loading…
Reference in New Issue