Package: release.debian.org
Severity: normal
Tags: bullseye
User: release.debian....@packages.debian.org
Usertags: pu
X-Debbugs-Cc: pkg-systemd-maintain...@lists.alioth.debian.org

Hi,

I'd like to make a stable upload for systemd fixing two issues in
systemd-detect-virt

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1013342
 systemd - Please backport support for Hyper-V on arm64 to stable

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1016157
 systemd-detect-virt fails to detect Openstack on arm64

All changes are cherry-picks from upstream Git and are already in
unstable/testing.


While at it, I also pulled a patch to fix build failures when systemd is
built against newer kernel headers (>= 5.14).

debdiff is attached.

Regards,
Michael
diff --git a/debian/changelog b/debian/changelog
index ddb3701..b1b7f43 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+systemd (247.3-7+deb11u1) bullseye; urgency=medium
+
+  * Drop bundled copy of linux/if_arp.h.
+    Fixes build failures with newer kernel headers.
+  * virt: support detection for ARM64 Hyper-V guests (Closes: #1013342)
+  * virt: detect OpenStack instance as KVM on arm (Closes: #1016157)
+
+ -- Michael Biebl <bi...@debian.org>  Sun, 07 Aug 2022 15:25:09 +0200
+
 systemd (247.3-7) bullseye; urgency=medium
 
   * Switch debian-branch to debian/bullseye
diff --git a/debian/patches/Drop-bundled-copy-of-linux-if_arp.h.patch 
b/debian/patches/Drop-bundled-copy-of-linux-if_arp.h.patch
new file mode 100644
index 0000000..83a6f2c
--- /dev/null
+++ b/debian/patches/Drop-bundled-copy-of-linux-if_arp.h.patch
@@ -0,0 +1,219 @@
+From: =?utf-8?q?Zbigniew_J=C4=99drzejewski-Szmek?= <zbys...@in.waw.pl>
+Date: Wed, 15 Sep 2021 16:33:05 +0200
+Subject: Drop bundled copy of linux/if_arp.h
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 8bit
+
+As far as I can see, we use this to get a list of ARPHRD_* defines (used in
+particular for Type= in .link files). If we drop our copy, and build against
+old kernel headers, the user will have a shorter list of types available.  This
+seems OK, and I don't think it's worth carrying our own version of this file
+just to have newest possible entries.
+
+7c5b9952c4f6e2b72f90edbe439982528b7cf223 recently updated this file, but we'd
+have to update it every time the kernel adds new entries. But if we look at
+the failure carefully:
+
+src/basic/arphrd-from-name.gperf:65:16: error: ‘ARPHRD_MCTP’ undeclared (first 
use in this function); did you mean ‘ARPHRD_FCPP’?
+   65 | MCTP, ARPHRD_MCTP
+      |                ^~
+      |                ARPHRD_FCPP
+
+we see that the list we were generating was from the system headers, so it was
+only as good as the system headers anyway, without the newer entries in our
+bundled copy, if there were any. So let's make things simpler by always using
+system headers.
+
+And if somebody wants to fix things so that we always have the newest list,
+then we should just generate and store the converted list, not the full header.
+
+(cherry picked from commit e7f46ee3ae1cc66a94b293957721d68dc09d7449)
+---
+ src/basic/linux/if_arp.h | 164 -----------------------------------------------
+ src/basic/meson.build    |   1 -
+ 2 files changed, 165 deletions(-)
+ delete mode 100644 src/basic/linux/if_arp.h
+
+diff --git a/src/basic/linux/if_arp.h b/src/basic/linux/if_arp.h
+deleted file mode 100644
+index c3cc5a9..0000000
+--- a/src/basic/linux/if_arp.h
++++ /dev/null
+@@ -1,164 +0,0 @@
+-/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
+-/*
+- * INET               An implementation of the TCP/IP protocol suite for the 
LINUX
+- *            operating system.  INET is implemented using the  BSD Socket
+- *            interface as the means of communication with the user level.
+- *
+- *            Global definitions for the ARP (RFC 826) protocol.
+- *
+- * Version:   @(#)if_arp.h    1.0.1   04/16/93
+- *
+- * Authors:   Original taken from Berkeley UNIX 4.3, (c) UCB 1986-1988
+- *            Portions taken from the KA9Q/NOS (v2.00m PA0GRI) source.
+- *            Ross Biro
+- *            Fred N. van Kempen, <wal...@uwalt.nl.mugnet.org>
+- *            Florian La Roche,
+- *            Jonathan Layes <la...@loran.com>
+- *            Arnaldo Carvalho de Melo <a...@conectiva.com.br> ARPHRD_HWX25
+- *
+- *            This program is free software; you can redistribute it and/or
+- *            modify it under the terms of the GNU General Public License
+- *            as published by the Free Software Foundation; either version
+- *            2 of the License, or (at your option) any later version.
+- */
+-#ifndef _UAPI_LINUX_IF_ARP_H
+-#define _UAPI_LINUX_IF_ARP_H
+-
+-#include <linux/netdevice.h>
+-
+-/* ARP protocol HARDWARE identifiers. */
+-#define ARPHRD_NETROM 0               /* from KA9Q: NET/ROM pseudo    */
+-#define ARPHRD_ETHER  1               /* Ethernet 10Mbps              */
+-#define       ARPHRD_EETHER   2               /* Experimental Ethernet        
*/
+-#define       ARPHRD_AX25     3               /* AX.25 Level 2                
*/
+-#define       ARPHRD_PRONET   4               /* PROnet token ring            
*/
+-#define       ARPHRD_CHAOS    5               /* Chaosnet                     
*/
+-#define       ARPHRD_IEEE802  6               /* IEEE 802.2 Ethernet/TR/TB    
*/
+-#define       ARPHRD_ARCNET   7               /* ARCnet                       
*/
+-#define       ARPHRD_APPLETLK 8               /* APPLEtalk                    
*/
+-#define ARPHRD_DLCI   15              /* Frame Relay DLCI             */
+-#define ARPHRD_ATM    19              /* ATM                          */
+-#define ARPHRD_METRICOM       23              /* Metricom STRIP (new IANA id) 
*/
+-#define       ARPHRD_IEEE1394 24              /* IEEE 1394 IPv4 - RFC 2734    
*/
+-#define ARPHRD_EUI64  27              /* EUI-64                       */
+-#define ARPHRD_INFINIBAND 32          /* InfiniBand                   */
+-
+-/* Dummy types for non ARP hardware */
+-#define ARPHRD_SLIP   256
+-#define ARPHRD_CSLIP  257
+-#define ARPHRD_SLIP6  258
+-#define ARPHRD_CSLIP6 259
+-#define ARPHRD_RSRVD  260             /* Notional KISS type           */
+-#define ARPHRD_ADAPT  264
+-#define ARPHRD_ROSE   270
+-#define ARPHRD_X25    271             /* CCITT X.25                   */
+-#define ARPHRD_HWX25  272             /* Boards with X.25 in firmware */
+-#define ARPHRD_CAN    280             /* Controller Area Network      */
+-#define ARPHRD_PPP    512
+-#define ARPHRD_CISCO  513             /* Cisco HDLC                   */
+-#define ARPHRD_HDLC   ARPHRD_CISCO
+-#define ARPHRD_LAPB   516             /* LAPB                         */
+-#define ARPHRD_DDCMP    517           /* Digital's DDCMP protocol     */
+-#define ARPHRD_RAWHDLC        518             /* Raw HDLC                     
*/
+-#define ARPHRD_RAWIP    519           /* Raw IP                       */
+-
+-#define ARPHRD_TUNNEL 768             /* IPIP tunnel                  */
+-#define ARPHRD_TUNNEL6        769             /* IP6IP6 tunnel                
*/
+-#define ARPHRD_FRAD   770             /* Frame Relay Access Device    */
+-#define ARPHRD_SKIP   771             /* SKIP vif                     */
+-#define ARPHRD_LOOPBACK       772             /* Loopback device              
*/
+-#define ARPHRD_LOCALTLK 773           /* Localtalk device             */
+-#define ARPHRD_FDDI   774             /* Fiber Distributed Data Interface */
+-#define ARPHRD_BIF      775             /* AP1000 BIF                   */
+-#define ARPHRD_SIT    776             /* sit0 device - IPv6-in-IPv4   */
+-#define ARPHRD_IPDDP  777             /* IP over DDP tunneller        */
+-#define ARPHRD_IPGRE  778             /* GRE over IP                  */
+-#define ARPHRD_PIMREG 779             /* PIMSM register interface     */
+-#define ARPHRD_HIPPI  780             /* High Performance Parallel Interface 
*/
+-#define ARPHRD_ASH    781             /* Nexus 64Mbps Ash             */
+-#define ARPHRD_ECONET 782             /* Acorn Econet                 */
+-#define ARPHRD_IRDA   783             /* Linux-IrDA                   */
+-/* ARP works differently on different FC media .. so  */
+-#define ARPHRD_FCPP   784             /* Point to point fibrechannel  */
+-#define ARPHRD_FCAL   785             /* Fibrechannel arbitrated loop */
+-#define ARPHRD_FCPL   786             /* Fibrechannel public loop     */
+-#define ARPHRD_FCFABRIC       787             /* Fibrechannel fabric          
*/
+-      /* 787->799 reserved for fibrechannel media types */
+-#define ARPHRD_IEEE802_TR 800         /* Magic type ident for TR      */
+-#define ARPHRD_IEEE80211 801          /* IEEE 802.11                  */
+-#define ARPHRD_IEEE80211_PRISM 802    /* IEEE 802.11 + Prism2 header  */
+-#define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */
+-#define ARPHRD_IEEE802154       804
+-#define ARPHRD_IEEE802154_MONITOR 805 /* IEEE 802.15.4 network monitor */
+-
+-#define ARPHRD_PHONET 820             /* PhoNet media type            */
+-#define ARPHRD_PHONET_PIPE 821                /* PhoNet pipe header           
*/
+-#define ARPHRD_CAIF   822             /* CAIF media type              */
+-#define ARPHRD_IP6GRE 823             /* GRE over IPv6                */
+-#define ARPHRD_NETLINK        824             /* Netlink header               
*/
+-#define ARPHRD_6LOWPAN        825             /* IPv6 over LoWPAN             
*/
+-#define ARPHRD_VSOCKMON       826             /* Vsock monitor header         
*/
+-
+-#define ARPHRD_VOID     0xFFFF        /* Void type, nothing is known */
+-#define ARPHRD_NONE     0xFFFE        /* zero header length */
+-
+-/* ARP protocol opcodes. */
+-#define       ARPOP_REQUEST   1               /* ARP request                  
*/
+-#define       ARPOP_REPLY     2               /* ARP reply                    
*/
+-#define       ARPOP_RREQUEST  3               /* RARP request                 
*/
+-#define       ARPOP_RREPLY    4               /* RARP reply                   
*/
+-#define       ARPOP_InREQUEST 8               /* InARP request                
*/
+-#define       ARPOP_InREPLY   9               /* InARP reply                  
*/
+-#define       ARPOP_NAK       10              /* (ATM)ARP NAK                 
*/
+-
+-
+-/* ARP ioctl request. */
+-struct arpreq {
+-      struct sockaddr arp_pa;         /* protocol address              */
+-      struct sockaddr arp_ha;         /* hardware address              */
+-      int             arp_flags;      /* flags                         */
+-      struct sockaddr arp_netmask;    /* netmask (only for proxy arps) */
+-      char            arp_dev[IFNAMSIZ];
+-};
+-
+-struct arpreq_old {
+-      struct sockaddr arp_pa;         /* protocol address              */
+-      struct sockaddr arp_ha;         /* hardware address              */
+-      int             arp_flags;      /* flags                         */
+-      struct sockaddr arp_netmask;    /* netmask (only for proxy arps) */
+-};
+-
+-/* ARP Flag values. */
+-#define ATF_COM               0x02            /* completed entry (ha valid)   
*/
+-#define       ATF_PERM        0x04            /* permanent entry              
*/
+-#define       ATF_PUBL        0x08            /* publish entry                
*/
+-#define       ATF_USETRAILERS 0x10            /* has requested trailers       
*/
+-#define ATF_NETMASK     0x20            /* want to use a netmask (only
+-                                         for proxy entries) */
+-#define ATF_DONTPUB   0x40            /* don't answer this addresses  */
+-
+-/*
+- *    This structure defines an ethernet arp header.
+- */
+-
+-struct arphdr {
+-      __be16          ar_hrd;         /* format of hardware address   */
+-      __be16          ar_pro;         /* format of protocol address   */
+-      unsigned char   ar_hln;         /* length of hardware address   */
+-      unsigned char   ar_pln;         /* length of protocol address   */
+-      __be16          ar_op;          /* ARP opcode (command)         */
+-
+-#if 0
+-       /*
+-        *      Ethernet looks like this : This bit is variable sized 
however...
+-        */
+-      unsigned char           ar_sha[ETH_ALEN];       /* sender hardware 
address      */
+-      unsigned char           ar_sip[4];              /* sender IP address    
        */
+-      unsigned char           ar_tha[ETH_ALEN];       /* target hardware 
address      */
+-      unsigned char           ar_tip[4];              /* target IP address    
        */
+-#endif
+-
+-};
+-
+-
+-#endif /* _UAPI_LINUX_IF_ARP_H */
+diff --git a/src/basic/meson.build b/src/basic/meson.build
+index 1183ea8..2c13cf4 100644
+--- a/src/basic/meson.build
++++ b/src/basic/meson.build
+@@ -98,7 +98,6 @@ basic_sources = files('''
+         linux/hdlc/ioctl.h
+         linux/if.h
+         linux/if_addr.h
+-        linux/if_arp.h
+         linux/if_bonding.h
+         linux/if_bridge.h
+         linux/if_ether.h
diff --git a/debian/patches/series b/debian/patches/series
index e41de0e..d0ebfa1 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -24,6 +24,10 @@ 
machine-basic-factor-out-helper-function-to-add-airlocked.patch
 machine-adjust-error-message-to-use-normalized-instead-of.patch
 shared-mount-util-use-namespace_fork-utils.patch
 machine-enter-target-PID-namespace-when-adding-a-live-mou.patch
+Drop-bundled-copy-of-linux-if_arp.h.patch
+virt-Support-detection-for-ARM64-Hyper-V-guests.patch
+virt-Fix-the-detection-for-Hyper-V-VMs.patch
+virt-detect-OpenStack-Nova-instance.patch
 debian/Use-Debian-specific-config-files.patch
 debian/Bring-tmpfiles.d-tmp.conf-in-line-with-Debian-defaul.patch
 debian/Make-run-lock-tmpfs-an-API-fs.patch
diff --git a/debian/patches/virt-Fix-the-detection-for-Hyper-V-VMs.patch 
b/debian/patches/virt-Fix-the-detection-for-Hyper-V-VMs.patch
new file mode 100644
index 0000000..9757987
--- /dev/null
+++ b/debian/patches/virt-Fix-the-detection-for-Hyper-V-VMs.patch
@@ -0,0 +1,38 @@
+From: Boqun Feng <boqun.f...@gmail.com>
+Date: Tue, 23 Nov 2021 15:09:26 +0800
+Subject: virt: Fix the detection for Hyper-V VMs
+
+Use product_version instead of product_name in DMI table and the string
+"Hyper-V" to avoid misdetection.
+
+Fixes: #21468
+
+Signed-off-by: Boqun Feng <boqun.f...@gmail.com>
+(cherry picked from commit 76eec0649936d9ae2f9087769f463feaf0cf5cb4)
+---
+ src/basic/virt.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/src/basic/virt.c b/src/basic/virt.c
+index 0d45ee6..54befd9 100644
+--- a/src/basic/virt.c
++++ b/src/basic/virt.c
+@@ -140,7 +140,8 @@ static int detect_vm_dmi(void) {
+                 "/sys/class/dmi/id/product_name", /* Test this before 
sys_vendor to detect KVM over QEMU */
+                 "/sys/class/dmi/id/sys_vendor",
+                 "/sys/class/dmi/id/board_vendor",
+-                "/sys/class/dmi/id/bios_vendor"
++                "/sys/class/dmi/id/bios_vendor",
++                "/sys/class/dmi/id/product_version" /* For Hyper-V VMs test */
+         };
+ 
+         static const struct {
+@@ -158,7 +159,7 @@ static int detect_vm_dmi(void) {
+                 { "Parallels",           VIRTUALIZATION_PARALLELS },
+                 /* https://wiki.freebsd.org/bhyve */
+                 { "BHYVE",               VIRTUALIZATION_BHYVE     },
+-                { "Microsoft",           VIRTUALIZATION_MICROSOFT },
++                { "Hyper-V",             VIRTUALIZATION_MICROSOFT },
+         };
+         unsigned i;
+         int r;
diff --git 
a/debian/patches/virt-Support-detection-for-ARM64-Hyper-V-guests.patch 
b/debian/patches/virt-Support-detection-for-ARM64-Hyper-V-guests.patch
new file mode 100644
index 0000000..373a77f
--- /dev/null
+++ b/debian/patches/virt-Support-detection-for-ARM64-Hyper-V-guests.patch
@@ -0,0 +1,28 @@
+From: Boqun Feng <boqun.f...@gmail.com>
+Date: Wed, 13 Oct 2021 11:32:09 +0800
+Subject: virt: Support detection for ARM64 Hyper-V guests
+
+The detection of Microsoft Hyper-V VMs is done by cpuid currently,
+however there is no cpuid on ARM64. And since ARM64 is now a supported
+architecture for Microsoft Hyper-V guests[1], then use DMI tables to
+detect a Hyper-V guest, which is more generic and works for ARM64.
+
+[1]: 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7aff79e297ee1aa0126924921fd87a4ae59d2467
+
+(cherry picked from commit 506bbc8569014253ea8614b680ccbc4fc2513a87)
+---
+ src/basic/virt.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/basic/virt.c b/src/basic/virt.c
+index 7d78a40..0d45ee6 100644
+--- a/src/basic/virt.c
++++ b/src/basic/virt.c
+@@ -158,6 +158,7 @@ static int detect_vm_dmi(void) {
+                 { "Parallels",           VIRTUALIZATION_PARALLELS },
+                 /* https://wiki.freebsd.org/bhyve */
+                 { "BHYVE",               VIRTUALIZATION_BHYVE     },
++                { "Microsoft",           VIRTUALIZATION_MICROSOFT },
+         };
+         unsigned i;
+         int r;
diff --git a/debian/patches/virt-detect-OpenStack-Nova-instance.patch 
b/debian/patches/virt-detect-OpenStack-Nova-instance.patch
new file mode 100644
index 0000000..87686b2
--- /dev/null
+++ b/debian/patches/virt-detect-OpenStack-Nova-instance.patch
@@ -0,0 +1,21 @@
+From: Michael Biebl <bi...@debian.org>
+Date: Sun, 7 Aug 2022 15:21:12 +0200
+Subject: virt: detect OpenStack Nova instance
+
+(cherry picked from commit 01d9fbccddd694bc584aed24eaa0543f831dc929)
+---
+ src/basic/virt.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/basic/virt.c b/src/basic/virt.c
+index 54befd9..78ee1b8 100644
+--- a/src/basic/virt.c
++++ b/src/basic/virt.c
+@@ -149,6 +149,7 @@ static int detect_vm_dmi(void) {
+                 int id;
+         } dmi_vendor_table[] = {
+                 { "KVM",                 VIRTUALIZATION_KVM       },
++                { "OpenStack",           VIRTUALIZATION_KVM       }, /* 
Detect OpenStack instance as KVM in non x86 architecture */
+                 { "QEMU",                VIRTUALIZATION_QEMU      },
+                 { "VMware",              VIRTUALIZATION_VMWARE    }, /* 
https://kb.vmware.com/s/article/1009458 */
+                 { "VMW",                 VIRTUALIZATION_VMWARE    },

Reply via email to