1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

libdaemon: Fix socket reuse error paths.

Invert S_ISSOCK validation.
Fail instead of replacing a symlink with a new socket.
After failure, skip calling fcntl with invalid socket_fd.
This commit is contained in:
Alasdair G Kergon 2015-05-13 13:42:09 +01:00
parent cc560b75aa
commit 02e10f4ccd
2 changed files with 4 additions and 3 deletions

View File

@ -1,5 +1,6 @@
Version 2.02.120 -
===============================
Fix some libdaemon socket creation and reuse error paths.
Daemons (libdaemon) support exit on idle also in non-systemd environment.
Provide make dist and make rpm targets
Configure lvm.conf for use_lvmetad and use_lvmpolld.

View File

@ -261,12 +261,12 @@ static int _open_socket(daemon_state s)
}
/* Socket already exists. If it's stale, remove it. */
if (stat(sockaddr.sun_path, &buf)) {
if (lstat(sockaddr.sun_path, &buf)) {
perror("stat failed");
goto error;
}
if (S_ISSOCK(buf.st_mode)) {
if (!S_ISSOCK(buf.st_mode)) {
fprintf(stderr, "%s: not a socket\n", sockaddr.sun_path);
goto error;
}
@ -595,7 +595,7 @@ void daemon_start(daemon_state s)
}
/* Set Close-on-exec */
if (fcntl(s.socket_fd, F_SETFD, 1))
if (!failed && fcntl(s.socket_fd, F_SETFD, 1))
fprintf(stderr, "setting CLOEXEC on socket fd %d failed: %s\n", s.socket_fd, strerror(errno));
/* Signal parent, letting them know we are ready to go. */