From: Lukasz Dorau Date: Wed, 19 Oct 2011 09:51:48 +0000 (+0200) Subject: imsm: fix: prevent segfault in mark_failure X-Git-Tag: mdadm-3.2.3~127 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7d0c5e24a5b2425abcfb778f9c31db39f53703c8;p=thirdparty%2Fmdadm.git 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 Signed-off-by: NeilBrown --- diff --git a/super-intel.c b/super-intel.c index 401c701f..2c1bf058 100644 --- a/super-intel.c +++ b/super-intel.c @@ -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);