mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
Fix problem writing QEMU pidfile
* src/util.c: Don't drop capabilities until after the PID file has been written. Kill off child if writing the PID file fails * src/qemu_driver.c: Remove bogus trailing '/' in state dir
This commit is contained in:
parent
df3de82c06
commit
9a152d481b
@ -468,7 +468,7 @@ qemudStartup(int privileged) {
|
||||
goto out_of_memory;
|
||||
|
||||
if (virAsprintf(&qemu_driver->stateDir,
|
||||
"%s/run/libvirt/qemu/", LOCAL_STATE_DIR) == -1)
|
||||
"%s/run/libvirt/qemu", LOCAL_STATE_DIR) == -1)
|
||||
goto out_of_memory;
|
||||
} else {
|
||||
uid_t uid = geteuid();
|
||||
|
15
src/util.c
15
src/util.c
@ -513,12 +513,6 @@ __virExec(virConnectPtr conn,
|
||||
if ((hook)(data) != 0)
|
||||
_exit(1);
|
||||
|
||||
/* The hook above may need todo something privileged, so
|
||||
* we delay clearing capabilities until now */
|
||||
if ((flags & VIR_EXEC_CLEAR_CAPS) &&
|
||||
virClearCapabilities() < 0)
|
||||
_exit(1);
|
||||
|
||||
/* Daemonize as late as possible, so the parent process can detect
|
||||
* the above errors with wait* */
|
||||
if (flags & VIR_EXEC_DAEMON) {
|
||||
@ -543,6 +537,9 @@ __virExec(virConnectPtr conn,
|
||||
|
||||
if (pid > 0) {
|
||||
if (pidfile && virFileWritePidPath(pidfile,pid)) {
|
||||
kill(pid, SIGTERM);
|
||||
usleep(500*1000);
|
||||
kill(pid, SIGTERM);
|
||||
virReportSystemError(conn, errno,
|
||||
"%s", _("could not write pidfile"));
|
||||
_exit(1);
|
||||
@ -551,6 +548,12 @@ __virExec(virConnectPtr conn,
|
||||
}
|
||||
}
|
||||
|
||||
/* The steps above may need todo something privileged, so
|
||||
* we delay clearing capabilities until the last minute */
|
||||
if ((flags & VIR_EXEC_CLEAR_CAPS) &&
|
||||
virClearCapabilities() < 0)
|
||||
_exit(1);
|
||||
|
||||
if (envp)
|
||||
execve(argv[0], (char **) argv, (char**)envp);
|
||||
else
|
||||
|
Loading…
x
Reference in New Issue
Block a user