summaryrefslogtreecommitdiffstats
path: root/sysfs.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2008-07-18 16:37:16 +1000
committerNeilBrown <neilb@suse.de>2008-07-18 16:37:16 +1000
commit7364918895b6b014d1a675c38973845cdf3baf41 (patch)
tree1025690bb5cbf057adb00929c918ba91b00fc8e9 /sysfs.c
parent44d2e36556921e82a9fde02b554f799741c92531 (diff)
downloadmdadm-7364918895b6b014d1a675c38973845cdf3baf41.tar.gz
mdadm-7364918895b6b014d1a675c38973845cdf3baf41.tar.xz
mdadm-7364918895b6b014d1a675c38973845cdf3baf41.zip
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 <neilb@suse.de>
Diffstat (limited to 'sysfs.c')
-rw-r--r--sysfs.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sysfs.c b/sysfs.c
index 847a4e1..bc021cc 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);