summaryrefslogtreecommitdiff
path: root/backport-nscd-Fix-netlink-cache-invalidation-if-epoll-is-used.patch
diff options
context:
space:
mode:
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.patch48
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
+