mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
lxc: avoid use-after-free
I got this weird failure:
error: Failed to start domain simple
error: internal error cannot mix caller fds with blocking execution
and tracked it down to a use-after-free - virCommandSetOutputFD
was storing the address of a stack-local variable, which then
went out of scope before the virCommandRun that dereferenced it.
Bug introduced in commit 451cfd05
(0.9.2).
* src/lxc/lxc_driver.c (lxcBuildControllerCmd): Move log fd
registration...
(lxcVmStart): ...to caller.
This commit is contained in:
parent
26ff8996b1
commit
04d2a7f253
@ -1449,7 +1449,6 @@ lxcBuildControllerCmd(lxc_driver_t *driver,
|
||||
char **veths,
|
||||
int *ttyFDs,
|
||||
size_t nttyFDs,
|
||||
int logfile,
|
||||
int handshakefd)
|
||||
{
|
||||
size_t i;
|
||||
@ -1524,8 +1523,6 @@ lxcBuildControllerCmd(lxc_driver_t *driver,
|
||||
}
|
||||
|
||||
virCommandPreserveFD(cmd, handshakefd);
|
||||
virCommandSetOutputFD(cmd, &logfile);
|
||||
virCommandSetErrorFD(cmd, &logfile);
|
||||
|
||||
return cmd;
|
||||
cleanup:
|
||||
@ -1747,8 +1744,10 @@ static int lxcVmStart(virConnectPtr conn,
|
||||
vm,
|
||||
nveths, veths,
|
||||
ttyFDs, nttyFDs,
|
||||
logfd, handshakefds[1])))
|
||||
handshakefds[1])))
|
||||
goto cleanup;
|
||||
virCommandSetOutputFD(cmd, &logfd);
|
||||
virCommandSetErrorFD(cmd, &logfd);
|
||||
|
||||
/* Log timestamp */
|
||||
if ((timestamp = virTimestamp()) == NULL) {
|
||||
|
Loading…
Reference in New Issue
Block a user