mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
uml: avoid crash on partial read
Coverity detected a potential dereference of uninitialized memory if recvfrom got cut short. * src/uml/uml_driver.c (umlMonitorCommand): Validate complete read prior to dereferencing res.
This commit is contained in:
parent
2103d87c89
commit
4acbb29821
@ -733,14 +733,24 @@ static int umlMonitorCommand(virConnectPtr conn,
|
|||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
ssize_t nbytes;
|
||||||
addrlen = sizeof(addr);
|
addrlen = sizeof(addr);
|
||||||
if (recvfrom(priv->monitor, &res, sizeof res, 0,
|
nbytes = recvfrom(priv->monitor, &res, sizeof res, 0,
|
||||||
(struct sockaddr *)&addr, &addrlen) < 0) {
|
(struct sockaddr *)&addr, &addrlen) < 0;
|
||||||
|
if (nbytes < 0) {
|
||||||
|
if (errno == EAGAIN || errno == EINTR)
|
||||||
|
continue;
|
||||||
virReportSystemError(errno,
|
virReportSystemError(errno,
|
||||||
_("cannot read reply %s"),
|
_("cannot read reply %s"),
|
||||||
cmd);
|
cmd);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
if (nbytes < sizeof res) {
|
||||||
|
virReportSystemError(errno,
|
||||||
|
_("incomplete reply %s"),
|
||||||
|
cmd);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
if (VIR_REALLOC_N(retdata, retlen + res.length) < 0) {
|
if (VIR_REALLOC_N(retdata, retlen + res.length) < 0) {
|
||||||
virReportOOMError();
|
virReportOOMError();
|
||||||
|
Loading…
Reference in New Issue
Block a user