]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Correct readlink usage in sysfs.c
authorNeilBrown <neilb@suse.de>
Fri, 18 Jul 2008 06:37:16 +0000 (16:37 +1000)
committerNeilBrown <neilb@suse.de>
Fri, 18 Jul 2008 06:37:16 +0000 (16:37 +1000)
readlink doesn't nul-terminate the returned string, so we must
be sure to do that.

Signed-off-by: Neil Brown <neilb@suse.de>
sysfs.c

diff --git a/sysfs.c b/sysfs.c
index 847a4e1e4caf8d8e38748397eafd664413eea9fa..bc021cc7fae3d07e714f9ad390803f643e2f2bf2 100644 (file)
--- 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);