aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2013-12-06 15:42:35 +0000
committerJo-Philipp Wich <jow@openwrt.org>2013-12-06 15:42:35 +0000
commit7d725aab9ac991f336790dff98fa4ad62afc4f0a (patch)
tree4ffb79ff0f5acb630deea4925bf022b4dd0ade97 /target/linux/generic
parent21ee73c9205c9dda5d379c8681804beec238ae82 (diff)
downloadupstream-7d725aab9ac991f336790dff98fa4ad62afc4f0a.tar.gz
upstream-7d725aab9ac991f336790dff98fa4ad62afc4f0a.tar.bz2
upstream-7d725aab9ac991f336790dff98fa4ad62afc4f0a.zip
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 <jow@openwrt.org> SVN-Revision: 38999
Diffstat (limited to 'target/linux/generic')
-rw-r--r--target/linux/generic/patches-3.10/614-netfilter_arpt_arp_padding_fix.patch16
1 files changed, 16 insertions, 0 deletions
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 0000000000..70a8d04fa2
--- /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).