Merge pull request #25081 from keszybz/test-local-addresses-fail

Fix racy check in test-local-addresses
This commit is contained in:
Luca Boccassi 2022-10-20 17:47:14 +02:00 committed by GitHub
commit edbaca9f9c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 5 additions and 19 deletions

View file

@ -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;
@ -877,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;
@ -901,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;

View file

@ -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;

View file

@ -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);
@ -21,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);