File 0103-initrd-workaround-zero-v6-prefixes-for-NBFT-HFIs.patch of Package NetworkManager

From 3abeb417d50d6c36e612e3c59aebaa3977b4fd9f Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Wed, 2 Apr 2025 17:45:33 +0200
Subject: [PATCH 103/106] 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 <tbzatek@redhat.com>
---
 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 cf2c3c1..bb2db70 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",
-- 
2.49.0

openSUSE Build Service is sponsored by