]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
imsm: fix: prevent segfault in mark_failure
authorLukasz Dorau <lukasz.dorau@intel.com>
Wed, 19 Oct 2011 09:51:48 +0000 (11:51 +0200)
committerNeilBrown <neilb@suse.de>
Thu, 20 Oct 2011 01:56:56 +0000 (12:56 +1100)
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>
super-intel.c

index 401c701f20f1bc617f038a965880ce9b21b4ac10..2c1bf05865f15d1b861b62f8acbe403dae8d1b7a 100644 (file)
@@ -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);