about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2022-05-18 18:40:15 +0200
committerMichael Biebl <biebl@debian.org>2022-05-18 18:40:15 +0200
commit133423d532ca75a3fc51e675288d9721d78ffdb0 (patch)
tree1de2a4f608bd76c29657ae3ea76f4081794a7fce
parent1a31bc3c63474ca02c83b02add85ea4e740e5597 (diff)
Cherry-pick a couple of fixes from upstream nm-1-38 branch
-rw-r--r--debian/patches/c-rbtree-fix-alignment-assertion-on-m64k.patch56
-rw-r--r--debian/patches/device-don-t-require-a-hardware-address-for-DHCPv6.patch36
-rw-r--r--debian/patches/series2
3 files changed, 94 insertions, 0 deletions
diff --git a/debian/patches/c-rbtree-fix-alignment-assertion-on-m64k.patch b/debian/patches/c-rbtree-fix-alignment-assertion-on-m64k.patch
new file mode 100644
index 00000000..c00cd520
--- /dev/null
+++ b/debian/patches/c-rbtree-fix-alignment-assertion-on-m64k.patch
@@ -0,0 +1,56 @@
+From: David Rheinsberg <david.rheinsberg@gmail.com>
+Date: Wed, 18 May 2022 11:31:45 +0200
+Subject: c-rbtree: fix alignment assertion on m64k
+
+We want to assert that our alignment-guarantees do not exceed the
+guarantees of the system-linker or system-allocator on the target
+platform. Hence, we check against max_align_t. This is a lower bound,
+but not the exact check we actually want. And as it turns out, on m64k
+it is too low. Add a static check against 4-byte alignment for m64k as
+a workaround.
+
+Reported-by: Michael Biebl
+Signed-off-by: David Rheinsberg <david.rheinsberg@gmail.com>
+
+https://github.com/c-util/c-rbtree/issues/9
+https://github.com/c-util/c-rbtree/commit/eb778d39694a0f3389f2438bbc45fb21685a047d
+(cherry picked from commit 78831d127fa169b26783ccaa6b534edfbb0adad4)
+(cherry picked from commit a83c884fb6e13aad783d547691620d43bed4db84)
+---
+ src/c-rbtree/src/c-rbtree.c | 21 +++++++++++++++++----
+ 1 file changed, 17 insertions(+), 4 deletions(-)
+
+diff --git a/src/c-rbtree/src/c-rbtree.c b/src/c-rbtree/src/c-rbtree.c
+index 2f0e608..28de4d9 100644
+--- a/src/c-rbtree/src/c-rbtree.c
++++ b/src/c-rbtree/src/c-rbtree.c
+@@ -35,12 +35,25 @@
+  * CRBNode is 4-byte aligned, so the lower 2 bits are actually unused. We also
+  * sometimes store a pointer to the root-node, so make sure this one is also 4
+  * byte aligned.
+- * Note that there are actually some architectures where `max_align_t` is 4, so
+- * we do not have much wiggle-room to extend this flag-set.
++ *
++ * Additionally, we want to avoid an alignment that is bigger than the
++ * alignment guaranteed by the system allocator or supported by the system
++ * linker. As there is no standard way to check this, we simply verify against
++ * `alignof(max_align_t)`, as this alignment must be supported by the
++ * toolchain.
++ *
++ * m64k is special here, as it only has a 2-byte max-alignment, but still
++ * guarantees a >=4-byte alignment on allocations. So hard-code the maximum for
++ * it.
+  */
+-static_assert(alignof(CRBNode) <= alignof(max_align_t), "Invalid RBNode alignment");
++#ifdef __m68k__
++#  define C_RBTREE_MAX_ALIGN (C_MAX(4, alignof(max_align_t)))
++#else
++#  define C_RBTREE_MAX_ALIGN (alignof(max_align_t))
++#endif
++static_assert(alignof(CRBNode) <= C_RBTREE_MAX_ALIGN, "Invalid RBNode alignment");
+ static_assert(alignof(CRBNode) >= 4, "Invalid CRBNode alignment");
+-static_assert(alignof(CRBTree) <= alignof(max_align_t), "Invalid RBTree alignment");
++static_assert(alignof(CRBTree) <= C_RBTREE_MAX_ALIGN, "Invalid RBTree alignment");
+ static_assert(alignof(CRBTree) >= 4, "Invalid CRBTree alignment");
+ 
+ /**
diff --git a/debian/patches/device-don-t-require-a-hardware-address-for-DHCPv6.patch b/debian/patches/device-don-t-require-a-hardware-address-for-DHCPv6.patch
new file mode 100644
index 00000000..09d48282
--- /dev/null
+++ b/debian/patches/device-don-t-require-a-hardware-address-for-DHCPv6.patch
@@ -0,0 +1,36 @@
+From: Beniamino Galvani <bgalvani@redhat.com>
+Date: Mon, 16 May 2022 17:53:51 +0200
+Subject: device: don't require a hardware address for DHCPv6
+
+DHCPv4 requires a hardware address, while DHCPv6 does not.
+
+Anyway, the DHCP manager already checks that an address is available
+when needed, so drop the check here.
+
+Fixes: 58287cbcc0c8 ('core: rework IP configuration in NetworkManager using layer 3 configuration')
+
+https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1228
+(cherry picked from commit 9bc7278da369d9dd69cc7687a5d050dfea793faa)
+(cherry picked from commit 1dbcc1c4412de43c6c5def417eef221b84535d7a)
+---
+ src/core/devices/nm-device.c | 7 -------
+ 1 file changed, 7 deletions(-)
+
+diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c
+index 70b52b1..9e2c1f9 100644
+--- a/src/core/devices/nm-device.c
++++ b/src/core/devices/nm-device.c
+@@ -10117,13 +10117,6 @@ _dev_ipdhcpx_start(NMDevice *self, int addr_family)
+ 
+     hwaddr = nmp_link_address_get_as_bytes(&pllink->l_address);
+ 
+-    if (!IS_IPv4) {
+-        if (!hwaddr) {
+-            fail_reason = "interface has no MAC address to start DHCPv6";
+-            goto out_fail;
+-        }
+-    }
+-
+     request_broadcast = FALSE;
+     if (pllink) {
+         str = nmp_object_link_udev_device_get_property_value(NMP_OBJECT_UP_CAST(pllink),
diff --git a/debian/patches/series b/debian/patches/series
index a2d7e06d..cf412f3b 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,3 @@
 Force-online-state-with-unmanaged-devices.patch
+c-rbtree-fix-alignment-assertion-on-m64k.patch
+device-don-t-require-a-hardware-address-for-DHCPv6.patch