[PATCH] erofs-utils: fix endiannes issue

Alexander Egorenkov egorenar at linux.ibm.com
Tue Apr 29 17:30:52 AEST 2025


Macros __BYTE_ORDER, __LITTLE_ENDIAN and __BIG_ENDIAN are defined in
user space header 'endian.h'. Not including this header results in
the condition #if __BYTE_ORDER == __LITTLE_ENDIAN being always true,
even on BE architectures (e.g. s390x). Due to this bug the compressor
library was built for LE byte-order on BE arch s390x.

Fixes: bc99c763e3fe ("erofs-utils: switch to effective unaligned access")
Signed-off-by: Alexander Egorenkov <egorenar at linux.ibm.com>
Reviewed-by: Ian Kent <raven at themaw.net>
Reviewed-by: Hongbo Li <lihongbo22 at huawei.com>
Signed-off-by: Gao Xiang <hsiangkao at linux.alibaba.com>
---
 configure.ac         |  1 +
 include/erofs/defs.h | 15 +++++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/configure.ac b/configure.ac
index 6e1e7a1..88f1cbe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -194,6 +194,7 @@ AC_ARG_WITH(selinux,
 AC_CHECK_HEADERS(m4_flatten([
 	dirent.h
 	execinfo.h
+	endian.h
 	fcntl.h
 	getopt.h
 	inttypes.h
diff --git a/include/erofs/defs.h b/include/erofs/defs.h
index 051a270..21e0f09 100644
--- a/include/erofs/defs.h
+++ b/include/erofs/defs.h
@@ -24,6 +24,21 @@ extern "C"
 #include <config.h>
 #endif
 
+#ifdef HAVE_ENDIAN_H
+#include <endian.h>
+#else
+/* Use GNU C predefined macros as a fallback */
+#ifndef __BYTE_ORDER
+#define __BYTE_ORDER	__BYTE_ORDER__
+#endif
+#ifndef __LITTLE_ENDIAN
+#define __LITTLE_ENDIAN	__ORDER_LITTLE_ENDIAN__
+#endif
+#ifndef __BIG_ENDIAN
+#define __BIG_ENDIAN	__ORDER_BIG_ENDIAN__
+#endif
+#endif
+
 #ifdef HAVE_LINUX_TYPES_H
 #include <linux/types.h>
 #endif
-- 
2.30.2



More information about the Linux-erofs mailing list