helpers: fix misuse of syscalls in sd namespace (#6379)

This commit is contained in:
Mykola Perehudov 2024-06-09 10:43:39 +03:00 committed by GitHub
parent c62f0015ae
commit bf75723f27
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -21,8 +21,8 @@ namespace Systemd {
} }
int SdNotify(int unsetEnvironment, const char* state) { int SdNotify(int unsetEnvironment, const char* state) {
int fd = socket(AF_UNIX, SOCK_DGRAM, 0); int fd = socket(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC, 0);
if (fd == -1) if (fd < 0)
return -errno; return -errno;
constexpr char envVar[] = "NOTIFY_SOCKET"; constexpr char envVar[] = "NOTIFY_SOCKET";
@ -47,12 +47,12 @@ namespace Systemd {
if (unixAddr.sun_path[0] == '@') if (unixAddr.sun_path[0] == '@')
unixAddr.sun_path[0] = '\0'; unixAddr.sun_path[0] = '\0';
if (!connect(fd, (const sockaddr*)&unixAddr, sizeof(struct sockaddr_un))) if (connect(fd, (const sockaddr*)&unixAddr, sizeof(struct sockaddr_un)) < 0)
return 1; return -errno;
// arbitrary value which seems to be enough for s-d messages // arbitrary value which seems to be enough for s-d messages
size_t stateLen = strnlen(state, 128); ssize_t stateLen = strnlen(state, 128);
if (write(fd, state, stateLen) >= 0) if (write(fd, state, stateLen) == stateLen)
return 1; return 1;
return -errno; return -errno;