Source: ebtables
Version: 2.0.11-6
Severity: important
Tags: ftbfs patch upstream
User: [email protected]
Usertags: origin-ubuntu stonking ubuntu-patch
Dear Maintainer,
ebtables fails to build on arm64 with recent kernel UAPI headers
(linux-libc-dev 7.3, currently in Ubuntu; Debian will see the same once it
gets these headers):
In file included from /usr/include/aarch64-linux-gnu/bits/sigcontext.h:30,
from /usr/include/signal.h:301,
from ebtablesd.c:24:
/usr/include/aarch64-linux-gnu/asm/sigcontext.h:81:9: error: unknown type
name '__u128'; did you mean '__u32'?
81 | __u128 vregs[32];
Cause: the source bundles an old copy of the kernel header
include/linux/types.h (from v3.16).
Because the build uses -I./include, it shadows the system <linux/types.h>.
Between kernel 7.0 and 7.3 the arm64 asm/sigcontext.h changed from the
compiler builtin __uint128_t to the kernel typedef __u128, which the
bundled copy does not define.
Only arm64 is affected.
The attached patch drops the bundled linux/types.h so the system header is
used. It builds fine, and with the 7.3 arm64 headers the error goes away.
The same patch has been sent upstream to netfilter-devel.
Ubuntu bug: https://bugs.launchpad.net/ubuntu/+source/ebtables/+bug/2169809
Thanks,
Sebastien
Description: Drop bundled copy of linux/types.h
The source ships an outdated copy of the kernel UAPI header
include/linux/types.h. Since the build uses -I./include, it shadows the
system header from linux-libc-dev. Newer kernel headers define __u128 in
linux/types.h and use it in asm/sigcontext.h on arm64 (pulled in via
<signal.h>), so the stale copy causes:
asm/sigcontext.h:81:9: error: unknown type name '__u128'
The system header provides everything the bundled copy did, so just use it.
Author: Sebastien Bacher <[email protected]>
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/ebtables/+bug/2169809
Forwarded: no
Last-Update: 2026-10-07
---
--- ebtables-2.0.11.orig/include/linux/types.h
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef _LINUX_TYPES_H
-#define _LINUX_TYPES_H
-
-#include <asm/types.h>
-
-#ifndef __ASSEMBLY__
-
-#include <linux/posix_types.h>
-
-
-/*
- * Below are truly Linux-specific types that should never collide with
- * any application/library that wants linux/types.h.
- */
-
-#ifdef __CHECKER__
-#define __bitwise__ __attribute__((bitwise))
-#else
-#define __bitwise__
-#endif
-#ifdef __CHECK_ENDIAN__
-#define __bitwise __bitwise__
-#else
-#define __bitwise
-#endif
-
-typedef __u16 __bitwise __le16;
-typedef __u16 __bitwise __be16;
-typedef __u32 __bitwise __le32;
-typedef __u32 __bitwise __be32;
-typedef __u64 __bitwise __le64;
-typedef __u64 __bitwise __be64;
-
-typedef __u16 __bitwise __sum16;
-typedef __u32 __bitwise __wsum;
-
-/*
- * aligned_u64 should be used in defining kernel<->userspace ABIs to avoid
- * common 32/64-bit compat problems.
- * 64-bit values align to 4-byte boundaries on x86_32 (and possibly other
- * architectures) and to 8-byte boundaries on 64-bit architectures. The new
- * aligned_64 type enforces 8-byte alignment so that structs containing
- * aligned_64 values have the same alignment on 32-bit and 64-bit architectures.
- * No conversions are necessary between 32-bit user-space and a 64-bit kernel.
- */
-#define __aligned_u64 __u64 __attribute__((aligned(8)))
-#define __aligned_be64 __be64 __attribute__((aligned(8)))
-#define __aligned_le64 __le64 __attribute__((aligned(8)))
-
-#endif /* __ASSEMBLY__ */
-#endif /* _LINUX_TYPES_H */