]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 5 Dec 2021 13:16:22 +0000 (14:16 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 5 Dec 2021 13:16:22 +0000 (14:16 +0100)
added patches:
natsemi-xtensa-fix-section-mismatch-warnings.patch
net-mpls-fix-notifications-when-deleting-a-device.patch
net-qlogic-qlcnic-fix-a-null-pointer-dereference-in-qlcnic_83xx_add_rings.patch
siphash-use-_unaligned-version-by-default.patch

queue-4.14/natsemi-xtensa-fix-section-mismatch-warnings.patch [new file with mode: 0644]
queue-4.14/net-mpls-fix-notifications-when-deleting-a-device.patch [new file with mode: 0644]
queue-4.14/net-qlogic-qlcnic-fix-a-null-pointer-dereference-in-qlcnic_83xx_add_rings.patch [new file with mode: 0644]
queue-4.14/series
queue-4.14/siphash-use-_unaligned-version-by-default.patch [new file with mode: 0644]

diff --git a/queue-4.14/natsemi-xtensa-fix-section-mismatch-warnings.patch b/queue-4.14/natsemi-xtensa-fix-section-mismatch-warnings.patch
new file mode 100644 (file)
index 0000000..0c507a0
--- /dev/null
@@ -0,0 +1,51 @@
+From b0f38e15979fa8851e88e8aa371367f264e7b6e9 Mon Sep 17 00:00:00 2001
+From: Randy Dunlap <rdunlap@infradead.org>
+Date: Mon, 29 Nov 2021 22:39:47 -0800
+Subject: natsemi: xtensa: fix section mismatch warnings
+
+From: Randy Dunlap <rdunlap@infradead.org>
+
+commit b0f38e15979fa8851e88e8aa371367f264e7b6e9 upstream.
+
+Fix section mismatch warnings in xtsonic. The first one appears to be
+bogus and after fixing the second one, the first one is gone.
+
+WARNING: modpost: vmlinux.o(.text+0x529adc): Section mismatch in reference from the function sonic_get_stats() to the function .init.text:set_reset_devices()
+The function sonic_get_stats() references
+the function __init set_reset_devices().
+This is often because sonic_get_stats lacks a __init
+annotation or the annotation of set_reset_devices is wrong.
+
+WARNING: modpost: vmlinux.o(.text+0x529b3b): Section mismatch in reference from the function xtsonic_probe() to the function .init.text:sonic_probe1()
+The function xtsonic_probe() references
+the function __init sonic_probe1().
+This is often because xtsonic_probe lacks a __init
+annotation or the annotation of sonic_probe1 is wrong.
+
+Fixes: 74f2a5f0ef64 ("xtensa: Add support for the Sonic Ethernet device for the XT2000 board.")
+Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
+Reported-by: kernel test robot <lkp@intel.com>
+Cc: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+Cc: Finn Thain <fthain@telegraphics.com.au>
+Cc: Chris Zankel <chris@zankel.net>
+Cc: linux-xtensa@linux-xtensa.org
+Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
+Acked-by: Max Filippov <jcmvbkbc@gmail.com>
+Link: https://lore.kernel.org/r/20211130063947.7529-1-rdunlap@infradead.org
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/ethernet/natsemi/xtsonic.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/ethernet/natsemi/xtsonic.c
++++ b/drivers/net/ethernet/natsemi/xtsonic.c
+@@ -128,7 +128,7 @@ static const struct net_device_ops xtson
+       .ndo_set_mac_address    = eth_mac_addr,
+ };
+-static int __init sonic_probe1(struct net_device *dev)
++static int sonic_probe1(struct net_device *dev)
+ {
+       static unsigned version_printed = 0;
+       unsigned int silicon_revision;
diff --git a/queue-4.14/net-mpls-fix-notifications-when-deleting-a-device.patch b/queue-4.14/net-mpls-fix-notifications-when-deleting-a-device.patch
new file mode 100644 (file)
index 0000000..5a18efd
--- /dev/null
@@ -0,0 +1,157 @@
+From 7d4741eacdefa5f0475431645b56baf00784df1f Mon Sep 17 00:00:00 2001
+From: Benjamin Poirier <bpoirier@nvidia.com>
+Date: Mon, 29 Nov 2021 15:15:05 +0900
+Subject: net: mpls: Fix notifications when deleting a device
+
+From: Benjamin Poirier <bpoirier@nvidia.com>
+
+commit 7d4741eacdefa5f0475431645b56baf00784df1f upstream.
+
+There are various problems related to netlink notifications for mpls route
+changes in response to interfaces being deleted:
+* delete interface of only nexthop
+       DELROUTE notification is missing RTA_OIF attribute
+* delete interface of non-last nexthop
+       NEWROUTE notification is missing entirely
+* delete interface of last nexthop
+       DELROUTE notification is missing nexthop
+
+All of these problems stem from the fact that existing routes are modified
+in-place before sending a notification. Restructure mpls_ifdown() to avoid
+changing the route in the DELROUTE cases and to create a copy in the
+NEWROUTE case.
+
+Fixes: f8efb73c97e2 ("mpls: multipath route support")
+Signed-off-by: Benjamin Poirier <bpoirier@nvidia.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ net/mpls/af_mpls.c |   68 ++++++++++++++++++++++++++++++++++++++++-------------
+ 1 file changed, 52 insertions(+), 16 deletions(-)
+
+--- a/net/mpls/af_mpls.c
++++ b/net/mpls/af_mpls.c
+@@ -1407,22 +1407,52 @@ static void mpls_dev_destroy_rcu(struct
+       kfree(mdev);
+ }
+-static void mpls_ifdown(struct net_device *dev, int event)
++static int mpls_ifdown(struct net_device *dev, int event)
+ {
+       struct mpls_route __rcu **platform_label;
+       struct net *net = dev_net(dev);
+-      u8 alive, deleted;
+       unsigned index;
+       platform_label = rtnl_dereference(net->mpls.platform_label);
+       for (index = 0; index < net->mpls.platform_labels; index++) {
+               struct mpls_route *rt = rtnl_dereference(platform_label[index]);
++              bool nh_del = false;
++              u8 alive = 0;
+               if (!rt)
+                       continue;
+-              alive = 0;
+-              deleted = 0;
++              if (event == NETDEV_UNREGISTER) {
++                      u8 deleted = 0;
++
++                      for_nexthops(rt) {
++                              struct net_device *nh_dev =
++                                      rtnl_dereference(nh->nh_dev);
++
++                              if (!nh_dev || nh_dev == dev)
++                                      deleted++;
++                              if (nh_dev == dev)
++                                      nh_del = true;
++                      } endfor_nexthops(rt);
++
++                      /* if there are no more nexthops, delete the route */
++                      if (deleted == rt->rt_nhn) {
++                              mpls_route_update(net, index, NULL, NULL);
++                              continue;
++                      }
++
++                      if (nh_del) {
++                              size_t size = sizeof(*rt) + rt->rt_nhn *
++                                      rt->rt_nh_size;
++                              struct mpls_route *orig = rt;
++
++                              rt = kmalloc(size, GFP_KERNEL);
++                              if (!rt)
++                                      return -ENOMEM;
++                              memcpy(rt, orig, size);
++                      }
++              }
++
+               change_nexthops(rt) {
+                       unsigned int nh_flags = nh->nh_flags;
+@@ -1446,16 +1476,15 @@ static void mpls_ifdown(struct net_devic
+ next:
+                       if (!(nh_flags & (RTNH_F_DEAD | RTNH_F_LINKDOWN)))
+                               alive++;
+-                      if (!rtnl_dereference(nh->nh_dev))
+-                              deleted++;
+               } endfor_nexthops(rt);
+               WRITE_ONCE(rt->rt_nhn_alive, alive);
+-              /* if there are no more nexthops, delete the route */
+-              if (event == NETDEV_UNREGISTER && deleted == rt->rt_nhn)
+-                      mpls_route_update(net, index, NULL, NULL);
++              if (nh_del)
++                      mpls_route_update(net, index, rt, NULL);
+       }
++
++      return 0;
+ }
+ static void mpls_ifup(struct net_device *dev, unsigned int flags)
+@@ -1519,8 +1548,12 @@ static int mpls_dev_notify(struct notifi
+               return NOTIFY_OK;
+       switch (event) {
++              int err;
++
+       case NETDEV_DOWN:
+-              mpls_ifdown(dev, event);
++              err = mpls_ifdown(dev, event);
++              if (err)
++                      return notifier_from_errno(err);
+               break;
+       case NETDEV_UP:
+               flags = dev_get_flags(dev);
+@@ -1531,13 +1564,18 @@ static int mpls_dev_notify(struct notifi
+               break;
+       case NETDEV_CHANGE:
+               flags = dev_get_flags(dev);
+-              if (flags & (IFF_RUNNING | IFF_LOWER_UP))
++              if (flags & (IFF_RUNNING | IFF_LOWER_UP)) {
+                       mpls_ifup(dev, RTNH_F_DEAD | RTNH_F_LINKDOWN);
+-              else
+-                      mpls_ifdown(dev, event);
++              } else {
++                      err = mpls_ifdown(dev, event);
++                      if (err)
++                              return notifier_from_errno(err);
++              }
+               break;
+       case NETDEV_UNREGISTER:
+-              mpls_ifdown(dev, event);
++              err = mpls_ifdown(dev, event);
++              if (err)
++                      return notifier_from_errno(err);
+               mdev = mpls_dev_get(dev);
+               if (mdev) {
+                       mpls_dev_sysctl_unregister(dev, mdev);
+@@ -1548,8 +1586,6 @@ static int mpls_dev_notify(struct notifi
+       case NETDEV_CHANGENAME:
+               mdev = mpls_dev_get(dev);
+               if (mdev) {
+-                      int err;
+-
+                       mpls_dev_sysctl_unregister(dev, mdev);
+                       err = mpls_dev_sysctl_register(dev, mdev);
+                       if (err)
diff --git a/queue-4.14/net-qlogic-qlcnic-fix-a-null-pointer-dereference-in-qlcnic_83xx_add_rings.patch b/queue-4.14/net-qlogic-qlcnic-fix-a-null-pointer-dereference-in-qlcnic_83xx_add_rings.patch
new file mode 100644 (file)
index 0000000..277e520
--- /dev/null
@@ -0,0 +1,59 @@
+From e2dabc4f7e7b60299c20a36d6a7b24ed9bf8e572 Mon Sep 17 00:00:00 2001
+From: Zhou Qingyang <zhou1615@umn.edu>
+Date: Tue, 30 Nov 2021 19:08:48 +0800
+Subject: net: qlogic: qlcnic: Fix a NULL pointer dereference in qlcnic_83xx_add_rings()
+
+From: Zhou Qingyang <zhou1615@umn.edu>
+
+commit e2dabc4f7e7b60299c20a36d6a7b24ed9bf8e572 upstream.
+
+In qlcnic_83xx_add_rings(), the indirect function of
+ahw->hw_ops->alloc_mbx_args will be called to allocate memory for
+cmd.req.arg, and there is a dereference of it in qlcnic_83xx_add_rings(),
+which could lead to a NULL pointer dereference on failure of the
+indirect function like qlcnic_83xx_alloc_mbx_args().
+
+Fix this bug by adding a check of alloc_mbx_args(), this patch
+imitates the logic of mbx_cmd()'s failure handling.
+
+This bug was found by a static analyzer. The analysis employs
+differential checking to identify inconsistent security operations
+(e.g., checks or kfrees) between two code paths and confirms that the
+inconsistent operations are not recovered in the current function or
+the callers, so they constitute bugs.
+
+Note that, as a bug found by static analysis, it can be a false
+positive or hard to trigger. Multiple researchers have cross-reviewed
+the bug.
+
+Builds with CONFIG_QLCNIC=m show no new warnings, and our
+static analyzer no longer warns about this code.
+
+Fixes: 7f9664525f9c ("qlcnic: 83xx memory map and HW access routine")
+Signed-off-by: Zhou Qingyang <zhou1615@umn.edu>
+Link: https://lore.kernel.org/r/20211130110848.109026-1-zhou1615@umn.edu
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c |   10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
++++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
+@@ -1078,8 +1078,14 @@ static int qlcnic_83xx_add_rings(struct
+       sds_mbx_size = sizeof(struct qlcnic_sds_mbx);
+       context_id = recv_ctx->context_id;
+       num_sds = adapter->drv_sds_rings - QLCNIC_MAX_SDS_RINGS;
+-      ahw->hw_ops->alloc_mbx_args(&cmd, adapter,
+-                                  QLCNIC_CMD_ADD_RCV_RINGS);
++      err = ahw->hw_ops->alloc_mbx_args(&cmd, adapter,
++                                      QLCNIC_CMD_ADD_RCV_RINGS);
++      if (err) {
++              dev_err(&adapter->pdev->dev,
++                      "Failed to alloc mbx args %d\n", err);
++              return err;
++      }
++
+       cmd.req.arg[1] = 0 | (num_sds << 8) | (context_id << 16);
+       /* set up status rings, mbx 2-81 */
index d307f18b745f40d5d41c7e51e33123b912967b7b..78680eb1829e72c1dae9ccacfafd0e63911a5a34 100644 (file)
@@ -86,3 +86,7 @@ sata_fsl-fix-uaf-in-sata_fsl_port_stop-when-rmmod-sata_fsl.patch
 sata_fsl-fix-warning-in-remove_proc_entry-when-rmmod-sata_fsl.patch
 fs-add-fget_many-and-fput_many.patch
 fget-check-that-the-fd-still-exists-after-getting-a-ref-to-it.patch
+natsemi-xtensa-fix-section-mismatch-warnings.patch
+net-qlogic-qlcnic-fix-a-null-pointer-dereference-in-qlcnic_83xx_add_rings.patch
+net-mpls-fix-notifications-when-deleting-a-device.patch
+siphash-use-_unaligned-version-by-default.patch
diff --git a/queue-4.14/siphash-use-_unaligned-version-by-default.patch b/queue-4.14/siphash-use-_unaligned-version-by-default.patch
new file mode 100644 (file)
index 0000000..2a07f27
--- /dev/null
@@ -0,0 +1,185 @@
+From f7e5b9bfa6c8820407b64eabc1f29c9a87e8993d Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Mon, 29 Nov 2021 10:39:29 -0500
+Subject: siphash: use _unaligned version by default
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+commit f7e5b9bfa6c8820407b64eabc1f29c9a87e8993d upstream.
+
+On ARM v6 and later, we define CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+because the ordinary load/store instructions (ldr, ldrh, ldrb) can
+tolerate any misalignment of the memory address. However, load/store
+double and load/store multiple instructions (ldrd, ldm) may still only
+be used on memory addresses that are 32-bit aligned, and so we have to
+use the CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS macro with care, or we
+may end up with a severe performance hit due to alignment traps that
+require fixups by the kernel. Testing shows that this currently happens
+with clang-13 but not gcc-11. In theory, any compiler version can
+produce this bug or other problems, as we are dealing with undefined
+behavior in C99 even on architectures that support this in hardware,
+see also https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100363.
+
+Fortunately, the get_unaligned() accessors do the right thing: when
+building for ARMv6 or later, the compiler will emit unaligned accesses
+using the ordinary load/store instructions (but avoid the ones that
+require 32-bit alignment). When building for older ARM, those accessors
+will emit the appropriate sequence of ldrb/mov/orr instructions. And on
+architectures that can truly tolerate any kind of misalignment, the
+get_unaligned() accessors resolve to the leXX_to_cpup accessors that
+operate on aligned addresses.
+
+Since the compiler will in fact emit ldrd or ldm instructions when
+building this code for ARM v6 or later, the solution is to use the
+unaligned accessors unconditionally on architectures where this is
+known to be fast. The _aligned version of the hash function is
+however still needed to get the best performance on architectures
+that cannot do any unaligned access in hardware.
+
+This new version avoids the undefined behavior and should produce
+the fastest hash on all architectures we support.
+
+Link: https://lore.kernel.org/linux-arm-kernel/20181008211554.5355-4-ard.biesheuvel@linaro.org/
+Link: https://lore.kernel.org/linux-crypto/CAK8P3a2KfmmGDbVHULWevB0hv71P2oi2ZCHEAqT=8dQfa0=cqQ@mail.gmail.com/
+Reported-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
+Fixes: 2c956a60778c ("siphash: add cryptographically secure PRF")
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Reviewed-by: Jason A. Donenfeld <Jason@zx2c4.com>
+Acked-by: Ard Biesheuvel <ardb@kernel.org>
+Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ include/linux/siphash.h |   14 ++++----------
+ lib/siphash.c           |   12 ++++++------
+ 2 files changed, 10 insertions(+), 16 deletions(-)
+
+--- a/include/linux/siphash.h
++++ b/include/linux/siphash.h
+@@ -27,9 +27,7 @@ static inline bool siphash_key_is_zero(c
+ }
+ u64 __siphash_aligned(const void *data, size_t len, const siphash_key_t *key);
+-#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+ u64 __siphash_unaligned(const void *data, size_t len, const siphash_key_t *key);
+-#endif
+ u64 siphash_1u64(const u64 a, const siphash_key_t *key);
+ u64 siphash_2u64(const u64 a, const u64 b, const siphash_key_t *key);
+@@ -82,10 +80,9 @@ static inline u64 ___siphash_aligned(con
+ static inline u64 siphash(const void *data, size_t len,
+                         const siphash_key_t *key)
+ {
+-#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+-      if (!IS_ALIGNED((unsigned long)data, SIPHASH_ALIGNMENT))
++      if (IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) ||
++          !IS_ALIGNED((unsigned long)data, SIPHASH_ALIGNMENT))
+               return __siphash_unaligned(data, len, key);
+-#endif
+       return ___siphash_aligned(data, len, key);
+ }
+@@ -96,10 +93,8 @@ typedef struct {
+ u32 __hsiphash_aligned(const void *data, size_t len,
+                      const hsiphash_key_t *key);
+-#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+ u32 __hsiphash_unaligned(const void *data, size_t len,
+                        const hsiphash_key_t *key);
+-#endif
+ u32 hsiphash_1u32(const u32 a, const hsiphash_key_t *key);
+ u32 hsiphash_2u32(const u32 a, const u32 b, const hsiphash_key_t *key);
+@@ -135,10 +130,9 @@ static inline u32 ___hsiphash_aligned(co
+ static inline u32 hsiphash(const void *data, size_t len,
+                          const hsiphash_key_t *key)
+ {
+-#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+-      if (!IS_ALIGNED((unsigned long)data, HSIPHASH_ALIGNMENT))
++      if (IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) ||
++          !IS_ALIGNED((unsigned long)data, HSIPHASH_ALIGNMENT))
+               return __hsiphash_unaligned(data, len, key);
+-#endif
+       return ___hsiphash_aligned(data, len, key);
+ }
+--- a/lib/siphash.c
++++ b/lib/siphash.c
+@@ -49,6 +49,7 @@
+       SIPROUND; \
+       return (v0 ^ v1) ^ (v2 ^ v3);
++#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+ u64 __siphash_aligned(const void *data, size_t len, const siphash_key_t *key)
+ {
+       const u8 *end = data + len - (len % sizeof(u64));
+@@ -80,8 +81,8 @@ u64 __siphash_aligned(const void *data,
+       POSTAMBLE
+ }
+ EXPORT_SYMBOL(__siphash_aligned);
++#endif
+-#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+ u64 __siphash_unaligned(const void *data, size_t len, const siphash_key_t *key)
+ {
+       const u8 *end = data + len - (len % sizeof(u64));
+@@ -113,7 +114,6 @@ u64 __siphash_unaligned(const void *data
+       POSTAMBLE
+ }
+ EXPORT_SYMBOL(__siphash_unaligned);
+-#endif
+ /**
+  * siphash_1u64 - compute 64-bit siphash PRF value of a u64
+@@ -250,6 +250,7 @@ EXPORT_SYMBOL(siphash_3u32);
+       HSIPROUND; \
+       return (v0 ^ v1) ^ (v2 ^ v3);
++#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+ u32 __hsiphash_aligned(const void *data, size_t len, const hsiphash_key_t *key)
+ {
+       const u8 *end = data + len - (len % sizeof(u64));
+@@ -280,8 +281,8 @@ u32 __hsiphash_aligned(const void *data,
+       HPOSTAMBLE
+ }
+ EXPORT_SYMBOL(__hsiphash_aligned);
++#endif
+-#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+ u32 __hsiphash_unaligned(const void *data, size_t len,
+                        const hsiphash_key_t *key)
+ {
+@@ -313,7 +314,6 @@ u32 __hsiphash_unaligned(const void *dat
+       HPOSTAMBLE
+ }
+ EXPORT_SYMBOL(__hsiphash_unaligned);
+-#endif
+ /**
+  * hsiphash_1u32 - compute 64-bit hsiphash PRF value of a u32
+@@ -418,6 +418,7 @@ EXPORT_SYMBOL(hsiphash_4u32);
+       HSIPROUND; \
+       return v1 ^ v3;
++#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+ u32 __hsiphash_aligned(const void *data, size_t len, const hsiphash_key_t *key)
+ {
+       const u8 *end = data + len - (len % sizeof(u32));
+@@ -438,8 +439,8 @@ u32 __hsiphash_aligned(const void *data,
+       HPOSTAMBLE
+ }
+ EXPORT_SYMBOL(__hsiphash_aligned);
++#endif
+-#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+ u32 __hsiphash_unaligned(const void *data, size_t len,
+                        const hsiphash_key_t *key)
+ {
+@@ -461,7 +462,6 @@ u32 __hsiphash_unaligned(const void *dat
+       HPOSTAMBLE
+ }
+ EXPORT_SYMBOL(__hsiphash_unaligned);
+-#endif
+ /**
+  * hsiphash_1u32 - compute 32-bit hsiphash PRF value of a u32