diff options
Diffstat (limited to 'backport-nscd-Fix-netlink-cache-invalidation-if-epoll-is-used.patch')
-rw-r--r-- | backport-nscd-Fix-netlink-cache-invalidation-if-epoll-is-used.patch | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/backport-nscd-Fix-netlink-cache-invalidation-if-epoll-is-used.patch b/backport-nscd-Fix-netlink-cache-invalidation-if-epoll-is-used.patch new file mode 100644 index 0000000..ee0eeef --- /dev/null +++ b/backport-nscd-Fix-netlink-cache-invalidation-if-epoll-is-used.patch @@ -0,0 +1,48 @@ +From 02ca25fef2785974011e9c5beecc99b900b69fd7 Mon Sep 17 00:00:00 2001 +From: Fabian Vogt <fvogt@suse.de> +Date: Wed, 27 Jul 2022 11:44:07 +0200 +Subject: [PATCH] nscd: Fix netlink cache invalidation if epoll is used [BZ + #29415] + +Processes cache network interface information such as whether IPv4 or IPv6 +are enabled. This is only checked again if the "netlink timestamp" provided +by nscd changed, which is triggered by netlink socket activity. + +However, in the epoll handler for the netlink socket, it was missed to +assign the new timestamp to the nscd database. The handler for plain poll +did that properly, copy that over. + +This bug caused that e.g. processes which started before network +configuration got unusuable addresses from getaddrinfo, like IPv6 only even +though only IPv4 is available: +https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1041 + +It's a bit hard to reproduce, so I verified this by checking the timestamp +on calls to __check_pf manually. Without this patch it's stuck at 1, now +it's increasing on network changes as expected. + +Conflict: NA +Reference:https://sourceware.org/git/?p=glibc.git;a=commit;h=02ca25fef2785974011e9c5beecc99b900b69fd7 + +Signed-off-by: Fabian Vogt <fvogt@suse.de> +--- + nscd/connections.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/nscd/connections.c b/nscd/connections.c +index 61d1674eb4..531d2e83df 100644 +--- a/nscd/connections.c ++++ b/nscd/connections.c +@@ -2284,7 +2284,8 @@ main_loop_epoll (int efd) + sizeof (buf))) != -1) + ; + +- __bump_nl_timestamp (); ++ dbs[hstdb].head->extra_data[NSCD_HST_IDX_CONF_TIMESTAMP] ++ = __bump_nl_timestamp (); + } + # endif + else +-- +2.27.0 + |