lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Thu,  4 Dec 2014 11:01:15 -0500
From:	Dan Streetman <ddstreet@...e.org>
To:	Jonathan Corbet <corbet@....net>, Jiri Kosina <jkosina@...e.cz>
Cc:	Dan Streetman <ddstreet@...e.org>,
	Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
	Peter Foley <pefoley2@...oley.com>,
	Seth Jennings <sjennings@...iantweb.net>,
	Randy Dunlap <rdunlap@...radead.org>,
	Ashutosh Dixit <ashutosh.dixit@...el.com>,
	Caz Yokoyama <Caz.Yokoyama@...el.com>,
	Dasaratharaman Chandramouli 
	<dasaratharaman.chandramouli@...el.com>,
	Sudeep Dutt <sudeep.dutt@...el.com>, linux-doc@...r.kernel.org,
	linux-kernel@...r.kernel.org
Subject: [PATCH] Documentation/mic/mpssd: fix compile error on BE platforms

Change any use of htole* macro in static context to instead manually check
for endianness and use __bswap_constant_* macro instead.

The current glibc definitions of the htole* macros don't allow their use
in a static context; on big endian systems the build fails with:

  HOSTCC  Documentation/mic/mpssd/mpssd.o
In file included from /usr/include/bits/byteswap.h:34:0,
                 from /usr/include/endian.h:60,
                 from /usr/include/bits/waitstatus.h:64,
                 from /usr/include/stdlib.h:42,
                 from .../Documentation/mic/mpssd/mpssd.c:23:
.../Documentation/mic/mpssd/mpssd.c:93:10:
error: braced-group within expression allowed only inside a function
   .num = htole16(MIC_VRING_ENTRIES),

...and...

.../Documentation/mic/mpssd/mpssd.c:119:3:
error: initializer element is not constant
   .host_features = htole32(

I also opened a glibc bug:
https://sourceware.org/bugzilla/show_bug.cgi?id=17679

But this patch is still needed to prevent build failures with the current
glibc htole* macro definitions.

Signed-off-by: Dan Streetman <ddstreet@...e.org>
---
 Documentation/mic/mpssd/mpssd.c | 54 ++++++++++++++++++++++++++++-------------
 1 file changed, 37 insertions(+), 17 deletions(-)

diff --git a/Documentation/mic/mpssd/mpssd.c b/Documentation/mic/mpssd/mpssd.c
index 3c5c379..b6cfbf0 100644
--- a/Documentation/mic/mpssd/mpssd.c
+++ b/Documentation/mic/mpssd/mpssd.c
@@ -77,6 +77,33 @@ static struct mic_info mic_list;
 #define VIRTIO_NET_HDR_F_DATA_VALID	2	/* Csum is valid */
 #endif
 
+#define VIRTNET_HOST_FEATURES			\
+	(1 << VIRTIO_NET_F_CSUM |		\
+	1 << VIRTIO_NET_F_GSO |			\
+	1 << VIRTIO_NET_F_GUEST_TSO4 |		\
+	1 << VIRTIO_NET_F_GUEST_TSO6 |		\
+	1 << VIRTIO_NET_F_GUEST_ECN |		\
+	1 << VIRTIO_NET_F_GUEST_UFO)
+
+/* Currently, glibc htole* macros don't allow use in static context,
+ * so we check and use __bswap_constant_* instead
+ */
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+# define MIC_VRING_ENTRIES_LE		MIC_VRING_ENTRIES
+# define VIRTNET_HOST_FEATURES_LE	VIRTNET_HOST_FEATURES
+# define VIRTBLK_HOST_FEATURES_LE	(1<<VIRTIO_BLK_F_SEG_MAX)
+# define VIRTBLK_CONFIG_SEG_MAX_LE	(MIC_VRING_ENTRIES - 2)
+#else /* __BIG_ENDIAN */
+# define MIC_VRING_ENTRIES_LE		\
+		__bswap_constant_16(MIC_VRING_ENTRIES)
+# define VIRTNET_HOST_FEATURES_LE	\
+		__bswap_constant_32(VIRTNET_HOST_FEATURES)
+# define VIRTBLK_HOST_FEATURES_LE	\
+		__bswap_constant_32(1<<VIRTIO_BLK_F_SEG_MAX)
+# define VIRTBLK_CONFIG_SEG_MAX_LE	\
+		__bswap_constant_32(MIC_VRING_ENTRIES - 2)
+#endif
+
 static struct {
 	struct mic_device_desc dd;
 	struct mic_vqconfig vqconfig[2];
@@ -90,10 +117,10 @@ static struct {
 		.config_len = sizeof(virtcons_dev_page.cons_config),
 	},
 	.vqconfig[0] = {
-		.num = htole16(MIC_VRING_ENTRIES),
+		.num = MIC_VRING_ENTRIES_LE,
 	},
 	.vqconfig[1] = {
-		.num = htole16(MIC_VRING_ENTRIES),
+		.num = MIC_VRING_ENTRIES_LE,
 	},
 };
 
@@ -110,21 +137,15 @@ static struct {
 		.config_len = sizeof(virtnet_dev_page.net_config),
 	},
 	.vqconfig[0] = {
-		.num = htole16(MIC_VRING_ENTRIES),
+		.num = MIC_VRING_ENTRIES_LE,
 	},
 	.vqconfig[1] = {
-		.num = htole16(MIC_VRING_ENTRIES),
+		.num = MIC_VRING_ENTRIES_LE,
 	},
 #if GSO_ENABLED
-		.host_features = htole32(
-		1 << VIRTIO_NET_F_CSUM |
-		1 << VIRTIO_NET_F_GSO |
-		1 << VIRTIO_NET_F_GUEST_TSO4 |
-		1 << VIRTIO_NET_F_GUEST_TSO6 |
-		1 << VIRTIO_NET_F_GUEST_ECN |
-		1 << VIRTIO_NET_F_GUEST_UFO),
+	.host_features = VIRTNET_HOST_FEATURES_LE,
 #else
-		.host_features = 0,
+	.host_features = 0,
 #endif
 };
 
@@ -143,13 +164,12 @@ static struct {
 		.config_len = sizeof(virtblk_dev_page.blk_config),
 	},
 	.vqconfig[0] = {
-		.num = htole16(MIC_VRING_ENTRIES),
+		.num = MIC_VRING_ENTRIES_LE,
 	},
-	.host_features =
-		htole32(1<<VIRTIO_BLK_F_SEG_MAX),
+	.host_features = VIRTBLK_HOST_FEATURES_LE,
 	.blk_config = {
-		.seg_max = htole32(MIC_VRING_ENTRIES - 2),
-		.capacity = htole64(0),
+		.seg_max = VIRTBLK_CONFIG_SEG_MAX_LE,
+		.capacity = 0,
 	 }
 };
 
-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ