Skip to content

Commit

Permalink
sd-device: enable SO_PASSCRED again after fork()
Browse files Browse the repository at this point in the history
When `--daemon` is specified to udevd,

v239:
socket() -> setsockopt(SO_RCVBUFFORCE) -> bind() -> set_nl_address()
  -> setsockopt(SO_PASSCRED) -> fork() -> setsockopt(SO_PASSCRED)

current:
socket() -> setsockopt(SO_RCVBUFFORCE) -> bind() -> set_nl_address()
  -> setsockopt(SO_PASSCRED) -> fork()

So, let's enable SO_PASSCRED again after fork().
  • Loading branch information
yuwata committed Jan 11, 2019
1 parent f90169d commit 03cc80e
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions src/libsystemd/sd-device/device-monitor.c
Original file line number Diff line number Diff line change
Expand Up @@ -275,11 +275,6 @@ int device_monitor_enable_receiving(sd_device_monitor *m) {
return log_debug_errno(r, "sd-device-monitor: Failed to update filter: %m");

if (!m->bound) {
/* enable receiving of sender credentials */
r = setsockopt_int(m->sock, SOL_SOCKET, SO_PASSCRED, true);
if (r < 0)
return log_debug_errno(r, "sd-device-monitor: Failed to set socket option SO_PASSCRED: %m");

if (bind(m->sock, &m->snl.sa, sizeof(struct sockaddr_nl)) < 0)
return log_debug_errno(errno, "sd-device-monitor: Failed to bind monitoring socket: %m");

Expand All @@ -290,6 +285,11 @@ int device_monitor_enable_receiving(sd_device_monitor *m) {
return log_debug_errno(r, "sd-device-monitor: Failed to set address: %m");
}

/* enable receiving of sender credentials */
r = setsockopt_int(m->sock, SOL_SOCKET, SO_PASSCRED, true);
if (r < 0)
return log_debug_errno(r, "sd-device-monitor: Failed to set socket option SO_PASSCRED: %m");

return 0;
}

Expand Down

0 comments on commit 03cc80e

Please sign in to comment.