From d856e1a745ef82a81c283353b80293332672287a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 20 Oct 2022 12:38:41 +0200 Subject: [PATCH 1/4] tree-wide: inline declarations of sd_netlink_message iterators Most places were already converted, but a few weren't for some reason. --- src/resolve/resolved-manager.c | 5 ++--- src/shared/local-addresses.c | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c index fc8d5b0663..316e2ea403 100644 --- a/src/resolve/resolved-manager.c +++ b/src/resolve/resolved-manager.c @@ -189,7 +189,6 @@ fail: static int manager_rtnl_listen(Manager *m) { _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL, *reply = NULL; - sd_netlink_message *i; int r; assert(m); @@ -232,7 +231,7 @@ static int manager_rtnl_listen(Manager *m) { if (r < 0) return r; - for (i = reply; i; i = sd_netlink_message_next(i)) { + for (sd_netlink_message *i = reply; i; i = sd_netlink_message_next(i)) { r = manager_process_link(m->rtnl, i, m); if (r < 0) return r; @@ -254,7 +253,7 @@ static int manager_rtnl_listen(Manager *m) { if (r < 0) return r; - for (i = reply; i; i = sd_netlink_message_next(i)) { + for (sd_netlink_message *i = reply; i; i = sd_netlink_message_next(i)) { r = manager_process_address(m->rtnl, i, m); if (r < 0) return r; diff --git a/src/shared/local-addresses.c b/src/shared/local-addresses.c index 4d6bf9307d..2876f72d16 100644 --- a/src/shared/local-addresses.c +++ b/src/shared/local-addresses.c @@ -68,7 +68,6 @@ int local_addresses( _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL; _cleanup_free_ struct local_address *list = NULL; size_t n_list = 0; - sd_netlink_message *m; int r; if (context) @@ -91,7 +90,7 @@ int local_addresses( if (r < 0) return r; - for (m = reply; m; m = sd_netlink_message_next(m)) { + for (sd_netlink_message *m = reply; m; m = sd_netlink_message_next(m)) { struct local_address *a; unsigned char flags; uint16_t type; From 983e637872672c3a68d77180478db377060b6b9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 20 Oct 2022 12:39:07 +0200 Subject: [PATCH 2/4] resolved: drop unnecessary empty lines --- src/resolve/resolved-manager.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c index 316e2ea403..f62efa87aa 100644 --- a/src/resolve/resolved-manager.c +++ b/src/resolve/resolved-manager.c @@ -876,10 +876,8 @@ static int sendmsg_loop(int fd, struct msghdr *mh, int flags) { for (;;) { if (sendmsg(fd, mh, flags) >= 0) return 0; - if (errno == EINTR) continue; - if (errno != EAGAIN) return -errno; @@ -900,10 +898,8 @@ static int write_loop(int fd, void *message, size_t length) { for (;;) { if (write(fd, message, length) >= 0) return 0; - if (errno == EINTR) continue; - if (errno != EAGAIN) return -errno; From 3f861e8dd904971af74f8513539b42fa072125aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 20 Oct 2022 12:43:35 +0200 Subject: [PATCH 3/4] test-local-addresses: inline iterator variable --- src/test/test-local-addresses.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/test/test-local-addresses.c b/src/test/test-local-addresses.c index 732d47a3f9..449192f0e0 100644 --- a/src/test/test-local-addresses.c +++ b/src/test/test-local-addresses.c @@ -9,9 +9,7 @@ #include "tests.h" static void print_local_addresses(struct local_address *a, unsigned n) { - unsigned i; - - for (i = 0; i < n; i++) { + for (unsigned i = 0; i < n; i++) { _cleanup_free_ char *b = NULL; assert_se(in_addr_to_string(a[i].family, &a[i].address, &b) >= 0); From 0ed08e50dd975511d85ed3dcd8a1d583e5055611 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 20 Oct 2022 12:54:44 +0200 Subject: [PATCH 4/4] test-local-addresses: drop racy check The test would fail when addresses were being removed in parallel. In general, the check is only valid when the machine configuration is static, which in general isn't true. CentOS CI (Arch Linux) fails in TEST-02-UNITTESTS test-local-addresses: 10:38:05 (gdb) #0 0x00007f86260a164c in ?? () from /usr/lib/libc.so.6 10:38:05 No symbol table info available. 10:38:05 #1 0x00007f8626051958 in raise () from /usr/lib/libc.so.6 10:38:05 No symbol table info available. 10:38:05 #2 0x00007f862603b53d in abort () from /usr/lib/libc.so.6 10:38:05 No symbol table info available. 10:38:05 #3 0x00007f862639a755 in log_assert_failed ( 10:38:05 text=text@entry=0x56180e56c03b "n == n_ipv4 + n_ipv6", 10:38:05 file=file@entry=0x56180e56c0d1 "src/test/test-local-addresses.c", 10:38:05 line=line@entry=45, 10:38:05 func=func@entry=0x56180e56c360 <__PRETTY_FUNCTION__.6> "test_local_addresses") at ../build/src/basic/log.c:853 10:38:05 No locals. 10:38:05 #4 0x000056180e56b77e in test_local_addresses () 10:38:05 at ../build/src/test/test-local-addresses.c:45 10:38:05 a = 0x0 10:38:05 n = 234 10:38:05 n_ipv4 = 236 10:38:05 n_ipv6 = 7 10:38:05 __PRETTY_FUNCTION__ = "test_local_addresses" 10:38:05 __func__ = "test_local_addresses" 10:38:05 #5 0x000056180e56ba67 in run_test_table () at ../build/src/shared/tests.h:106 10:38:05 r = 0 10:38:05 t = 0x56180e56e010 <__unique_prefix_static_test_table_entry10> 10:38:05 __PRETTY_FUNCTION__ = 10:38:05 __func__ = "run_test_table" 10:38:05 #6 0x000056180e56bb2f in main (argc=1, argv=0x7ffc3a814808) 10:38:05 at ../build/src/test/test-local-addresses.c:81 10:38:05 _intro = 0x0 10:38:05 _outro = 0x0 10:38:05 _r = 0 10:38:05 _q = 0 10:38:05 (gdb) The logs show that there's a huge number of private addresses, probably from some other test running in parallel. --- src/test/test-local-addresses.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/test/test-local-addresses.c b/src/test/test-local-addresses.c index 449192f0e0..5a02465f23 100644 --- a/src/test/test-local-addresses.c +++ b/src/test/test-local-addresses.c @@ -19,49 +19,43 @@ static void print_local_addresses(struct local_address *a, unsigned n) { TEST(local_addresses) { struct local_address *a = NULL; - int n, n_ipv4, n_ipv6; + int n; n = local_addresses(NULL, 0, AF_INET, &a); assert_se(n >= 0); log_debug("/* Local Addresses(ifindex:0, AF_INET) */"); print_local_addresses(a, (unsigned) n); a = mfree(a); - n_ipv4 = n; n = local_addresses(NULL, 0, AF_INET6, &a); assert_se(n >= 0); log_debug("/* Local Addresses(ifindex:0, AF_INET6) */"); print_local_addresses(a, (unsigned) n); a = mfree(a); - n_ipv6 = n; n = local_addresses(NULL, 0, AF_UNSPEC, &a); assert_se(n >= 0); log_debug("/* Local Addresses(ifindex:0, AF_UNSPEC) */"); print_local_addresses(a, (unsigned) n); a = mfree(a); - assert_se(n == n_ipv4 + n_ipv6); n = local_addresses(NULL, 1, AF_INET, &a); assert_se(n >= 0); log_debug("/* Local Addresses(ifindex:1, AF_INET) */"); print_local_addresses(a, (unsigned) n); a = mfree(a); - n_ipv4 = n; n = local_addresses(NULL, 1, AF_INET6, &a); assert_se(n >= 0); log_debug("/* Local Addresses(ifindex:1, AF_INET6) */"); print_local_addresses(a, (unsigned) n); a = mfree(a); - n_ipv6 = n; n = local_addresses(NULL, 1, AF_UNSPEC, &a); assert_se(n >= 0); log_debug("/* Local Addresses(ifindex:1, AF_UNSPEC) */"); print_local_addresses(a, (unsigned) n); a = mfree(a); - assert_se(n == n_ipv4 + n_ipv6); n = local_gateways(NULL, 0, AF_UNSPEC, &a); assert_se(n >= 0);