hotplug.c: set nl_pid to zero
authorStefan Eichenberger <eichest@gmail.com>
Sun, 24 Jan 2021 22:58:50 +0000 (23:58 +0100)
committerJohn Crispin <john@phrozen.org>
Tue, 26 Jan 2021 10:16:18 +0000 (11:16 +0100)
With the current solution where nl_pid is set through getpid we run into
problems when running procd in a different PID namespace (e.g.
container). The PID number inside the active PID namespace will be set
which doesn't match the global PID. Therefore, procd will never receive
any netlink messages.

By setting nl_pid to zero the kernel will assign the global PID
automatically and fixes the issue.

Signed-off-by: Stefan Eichenberger <eichest@gmail.com>
Acked-by: John Crispin <john@phrozen.org>
plug/hotplug.c

index 9aeb1c17dc7fd97d3532177b0efc7faa99ec162e..beff38aaaef2b969e968742ee449b893c9405e84 100644 (file)
@@ -612,7 +612,7 @@ void hotplug(char *rules)
 
        rule_file = strdup(rules);
        nls.nl_family = AF_NETLINK;
 
        rule_file = strdup(rules);
        nls.nl_family = AF_NETLINK;
-       nls.nl_pid = getpid();
+       nls.nl_pid = 0;
        nls.nl_groups = -1;
 
        if ((hotplug_fd.fd = socket(PF_NETLINK, SOCK_DGRAM | SOCK_CLOEXEC, NETLINK_KOBJECT_UEVENT)) == -1) {
        nls.nl_groups = -1;
 
        if ((hotplug_fd.fd = socket(PF_NETLINK, SOCK_DGRAM | SOCK_CLOEXEC, NETLINK_KOBJECT_UEVENT)) == -1) {