From 26de6cbc8d8c765877c8e55cf2d84b0ceec5fad1 Mon Sep 17 00:00:00 2001 From: "Marc E. Fiuczynski" Date: Mon, 13 Jun 2022 08:43:14 -0400 Subject: [PATCH] fix for issue 4026: set broadcast to 0.0.0.0 for /31 and /32 Signed-off-by: Marc E. Fiuczynski --- src/lxc/confile.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/lxc/confile.c b/src/lxc/confile.c index f5ff9f620..7966d32e8 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c @@ -899,13 +899,19 @@ static int set_config_net_ipv4_address(const char *key, const char *value, /* If no broadcast address, compute one from the prefix and address. */ if (!bcast) { - unsigned int shift = LAST_BIT_PER_TYPE(inetdev->prefix); + /* 0<=inetdev->prefix<=32 */ + switch (inetdev->prefix) { + case 32: /* single IPv4 network */ + ; /* fall thru */ + case 31: /* RFC 3021 point to point network */ + inetdev->bcast.s_addr = INADDR_ANY; + break; - inetdev->bcast.s_addr = inetdev->addr.s_addr; - if (inetdev->prefix < shift) - shift = inetdev->prefix; - inetdev->bcast.s_addr |= htonl(INADDR_BROADCAST >> shift); - } + default: + inetdev->bcast.s_addr |= htonl(INADDR_BROADCAST >> inetdev->prefix); + break; + } + } list_add_tail(&inetdev->head, &netdev->ipv4_addresses); move_ptr(inetdev); -- 2.47.2