From bf75723f2742973d4820f3f5378dff8c99333660 Mon Sep 17 00:00:00 2001 From: Mykola Perehudov Date: Sun, 9 Jun 2024 10:43:39 +0300 Subject: [PATCH] helpers: fix misuse of syscalls in sd namespace (#6379) --- src/helpers/SdDaemon.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/helpers/SdDaemon.cpp b/src/helpers/SdDaemon.cpp index 497101e4..25e0ca3b 100644 --- a/src/helpers/SdDaemon.cpp +++ b/src/helpers/SdDaemon.cpp @@ -21,8 +21,8 @@ namespace Systemd { } int SdNotify(int unsetEnvironment, const char* state) { - int fd = socket(AF_UNIX, SOCK_DGRAM, 0); - if (fd == -1) + int fd = socket(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC, 0); + if (fd < 0) return -errno; constexpr char envVar[] = "NOTIFY_SOCKET"; @@ -47,12 +47,12 @@ namespace Systemd { if (unixAddr.sun_path[0] == '@') unixAddr.sun_path[0] = '\0'; - if (!connect(fd, (const sockaddr*)&unixAddr, sizeof(struct sockaddr_un))) - return 1; + if (connect(fd, (const sockaddr*)&unixAddr, sizeof(struct sockaddr_un)) < 0) + return -errno; // arbitrary value which seems to be enough for s-d messages - size_t stateLen = strnlen(state, 128); - if (write(fd, state, stateLen) >= 0) + ssize_t stateLen = strnlen(state, 128); + if (write(fd, state, stateLen) == stateLen) return 1; return -errno;