From: NeilBrown Date: Fri, 18 Jul 2008 06:37:16 +0000 (+1000) Subject: Correct readlink usage in sysfs.c X-Git-Tag: mdadm-3.0-devel1~100 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7364918895b6b014d1a675c38973845cdf3baf41;p=thirdparty%2Fmdadm.git Correct readlink usage in sysfs.c readlink doesn't nul-terminate the returned string, so we must be sure to do that. Signed-off-by: Neil Brown --- diff --git a/sysfs.c b/sysfs.c index 847a4e1e..bc021cc7 100644 --- a/sysfs.c +++ b/sysfs.c @@ -374,14 +374,16 @@ int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd) memset(nm, 0, sizeof(nm)); sprintf(dv, "/sys/dev/block/%d:%d", sd->disk.major, sd->disk.minor); - if (readlink(dv, nm, sizeof(nm)) < 0) + rv = readlink(dv, nm, sizeof(nm)); + if (rv <= 0) return -1; + nm[rv] = '\0'; dname = strrchr(nm, '/'); if (dname) dname++; strcpy(sd->sys_name, "dev-"); strcpy(sd->sys_name+4, dname); - rv |= sysfs_set_num(sra, sd, "offset", sd->data_offset); + rv = sysfs_set_num(sra, sd, "offset", sd->data_offset); rv |= sysfs_set_num(sra, sd, "size", (sd->component_size+1) / 2); if (sra->array.level != LEVEL_CONTAINER) { rv |= sysfs_set_num(sra, sd, "slot", sd->disk.raid_disk);