mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-08-12 14:30:51 +00:00
Do not use strlen() on non-null terminated buffer
Signed-off-by: Christian Brauner <christianvanbrauner@gmail.com> Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
This commit is contained in:
parent
61111832cd
commit
f08fee55a1
@ -1989,7 +1989,7 @@ static bool mod_rdep(struct lxc_container *c0, struct lxc_container *c, bool inc
|
|||||||
char newpath[MAXPATHLEN];
|
char newpath[MAXPATHLEN];
|
||||||
int fd, ret, n = 0, v = 0;
|
int fd, ret, n = 0, v = 0;
|
||||||
bool bret = false;
|
bool bret = false;
|
||||||
size_t len;
|
size_t len, difflen;
|
||||||
|
|
||||||
if (container_disk_lock(c0))
|
if (container_disk_lock(c0))
|
||||||
return false;
|
return false;
|
||||||
@ -2072,19 +2072,22 @@ static bool mod_rdep(struct lxc_container *c0, struct lxc_container *c, bool inc
|
|||||||
|
|
||||||
/* mmap()ed memory is only \0-terminated when it is not
|
/* mmap()ed memory is only \0-terminated when it is not
|
||||||
* a multiple of a pagesize. Hence, we'll use memmem(). */
|
* a multiple of a pagesize. Hence, we'll use memmem(). */
|
||||||
if ((del = memmem(buf, fbuf.st_size, newpath, len))) {
|
if ((del = memmem(buf, fbuf.st_size, newpath, len))) {
|
||||||
/* remove container entry */
|
/* remove container entry */
|
||||||
memmove(del, del + len, strlen(del) - len + 1);
|
if (del != buf + fbuf.st_size - len) {
|
||||||
|
difflen = fbuf.st_size - (del-buf);
|
||||||
|
memmove(del, del + len, strnlen(del, difflen) - len);
|
||||||
|
}
|
||||||
|
|
||||||
munmap(buf, fbuf.st_size);
|
munmap(buf, fbuf.st_size);
|
||||||
|
|
||||||
if (ftruncate(fd, fbuf.st_size - len) < 0) {
|
if (ftruncate(fd, fbuf.st_size - len) < 0) {
|
||||||
SYSERROR("Failed to truncate file %s", path);
|
SYSERROR("Failed to truncate file %s", path);
|
||||||
close(fd);
|
close(fd);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
munmap(buf, fbuf.st_size);
|
munmap(buf, fbuf.st_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
close(fd);
|
close(fd);
|
||||||
|
Loading…
Reference in New Issue
Block a user