From: Jo-Philipp Wich Date: Fri, 6 Dec 2013 15:42:35 +0000 (+0000) Subject: generic: workaround arptables arpt_arp structure padding issue (#14577) X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=7d725aab9ac991f336790dff98fa4ad62afc4f0a;p=openwrt%2Fstaging%2Frmilecki.git generic: workaround arptables arpt_arp structure padding issue (#14577) Linaro GCC 4.6-2013.05 incorrectly pads the arpt_arp structure on at least the ar71xx target, resulting in a two bytes shorter struct in the kernel compared to what arptables userspace expects. When comparing sizeof(struct arpt_arp) in kernel and userspace, the former yields 162 byte, while the latter is 164 byte. As a consequence, the subsequent target_offset and next_offset members of the parent arpt_entry structure contain invalid values when processed by the arptables binary, leading to bad memory accesses in the populate_cache() procedure, subsequently causing a segfault. Signed-off-by: Jo-Philipp Wich SVN-Revision: 38999 --- diff --git a/target/linux/generic/patches-3.10/614-netfilter_arpt_arp_padding_fix.patch b/target/linux/generic/patches-3.10/614-netfilter_arpt_arp_padding_fix.patch new file mode 100644 index 00000000000..70a8d04fa2b --- /dev/null +++ b/target/linux/generic/patches-3.10/614-netfilter_arpt_arp_padding_fix.patch @@ -0,0 +1,16 @@ +--- a/include/uapi/linux/netfilter_arp/arp_tables.h ++++ b/include/uapi/linux/netfilter_arp/arp_tables.h +@@ -68,6 +68,13 @@ struct arpt_arp { + __u8 flags; + /* Inverse flags */ + __u16 invflags; ++ ++ /* For some reason Linaro GCC 4.6-2013.05 omits the two ++ * byte padding here when building for MIPS 34kc, leading to ++ * userspace abi mismatches. ++ * Add a dummy field to align this struct to 4 bytes ++ */ ++ __u16 padding; + }; + + /* Values for "flag" field in struct arpt_ip (general arp structure).