Fix off-by-one in readlink() buffer size handling
readlink() returns the number of bytes in the buffer. If we do something like len = readlink(path, buf, sizeof(buf)); buf[len] = '\0'; we might write one byte past the end of the buffer. Signed-off-by: Thomas Jarosch <thomas.jarosch@intra2net.com> Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
b601104eb4
commit
9cf014ec40
2
policy.c
2
policy.c
|
@ -222,7 +222,7 @@ static char *disk_path(struct mdinfo *disk)
|
|||
closedir(by_path);
|
||||
/* A NULL path isn't really acceptable - use the devname.. */
|
||||
sprintf(symlink, "/sys/dev/block/%d:%d", disk->disk.major, disk->disk.minor);
|
||||
rv = readlink(symlink, nm, sizeof(nm));
|
||||
rv = readlink(symlink, nm, sizeof(nm)-1);
|
||||
if (rv > 0) {
|
||||
char *dname;
|
||||
nm[rv] = 0;
|
||||
|
|
|
@ -2864,7 +2864,7 @@ static void fd2devname(int fd, char *name)
|
|||
sprintf(path, "/sys/dev/block/%d:%d",
|
||||
major(st.st_rdev), minor(st.st_rdev));
|
||||
|
||||
rv = readlink(path, dname, sizeof(dname));
|
||||
rv = readlink(path, dname, sizeof(dname)-1);
|
||||
if (rv <= 0)
|
||||
return;
|
||||
|
||||
|
|
2
sysfs.c
2
sysfs.c
|
@ -619,7 +619,7 @@ int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd, int resume)
|
|||
|
||||
memset(nm, 0, sizeof(nm));
|
||||
sprintf(dv, "/sys/dev/block/%d:%d", sd->disk.major, sd->disk.minor);
|
||||
rv = readlink(dv, nm, sizeof(nm));
|
||||
rv = readlink(dv, nm, sizeof(nm)-1);
|
||||
if (rv <= 0)
|
||||
return -1;
|
||||
nm[rv] = '\0';
|
||||
|
|
Loading…
Reference in New Issue