From 81839c0da82ea8f196fc87ec75f37e566f3c52c2 Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Wed, 2 Apr 2025 17:45:33 +0200 Subject: [PATCH] initrd: workaround zero v6 prefixes for NBFT HFIs Some firmware implementations incorrectly report v6 address prefix of zero. Let's use /64 as a sane workaround. Signed-off-by: Tomas Bzatek --- src/nm-initrd-generator/nmi-nbft-reader.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/nm-initrd-generator/nmi-nbft-reader.c b/src/nm-initrd-generator/nmi-nbft-reader.c index cf2c3c1626..bb2db70030 100644 --- a/src/nm-initrd-generator/nmi-nbft-reader.c +++ b/src/nm-initrd-generator/nmi-nbft-reader.c @@ -276,13 +276,17 @@ parse_hfi(GPtrArray *a, struct nbft_info_hfi *hfi, const char *table_name, char NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL, NULL); - /* FIXME: buggy firmware implementations may report prefix=0 for v6 addresses, - * reported as https://github.com/timberland-sig/edk2/issues/37 - */ - ipaddr = nm_ip_address_new_binary(AF_INET6, - &addr_bin, - hfi->tcp_info.subnet_mask_prefix, - &error); + prefix = hfi->tcp_info.subnet_mask_prefix; + if (prefix == 0) { + /* Buggy firmware implementations may report prefix=0 for v6 addresses, + * let's fall back to /64. + */ + _LOGW(LOGD_CORE, + "NBFT: Invalid IPv6 prefix %d, using /64 as a fallback.", + hfi->tcp_info.subnet_mask_prefix); + prefix = 64; + } + ipaddr = nm_ip_address_new_binary(AF_INET6, &addr_bin, prefix, &error); if (!ipaddr) { _LOGW(LOGD_CORE, "Cannot parse IP %s/%u: %s",