gluon/patches/packages/routing/0002-batman-adv-unaligned-access-fix.patch
Matthias Schiffer 4d9c3c1c79
modules: update routing packages
3aaa772ef520 bmx7: bump version
ccd4210f0ba7 bmx7: add PKG_MIRROR_HASH
d6dcd0c75630 bmx6: add PKG_MIRROR_HASH
536782119f0a alfred: upgrade package to latest release 2018.0
6a6f5da5efd5 batctl: upgrade package to latest release 2018.0
3bb75b003563 batman-adv: upgrade package to latest release 2018.0
2f74073c209d bmx7: bump version to 58b3823262512a48f5174e6778b2368c55bd05d9
733e935f04fc cjdns: v20 -> v20.1
f0ee73aa2285 bmx7: bump version
21a6454d7226 bmx6: bump to latest upstream version
2018-03-07 08:45:52 +01:00

100 lines
3.7 KiB
Diff

From: Matthias Schiffer <mschiffer@universe-factory.net>
Date: Tue, 23 Jan 2018 21:18:34 +0100
Subject: batman-adv: unaligned access fix
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
diff --git a/batman-adv/patches/900-unaligned-access.patch b/batman-adv/patches/900-unaligned-access.patch
new file mode 100644
index 0000000000000000000000000000000000000000..eb067329bc5e9f112b56d03c20c612fb1fd1e32d
--- /dev/null
+++ b/batman-adv/patches/900-unaligned-access.patch
@@ -0,0 +1,87 @@
+From: Matthias Schiffer <mschiffer@universe-factory.net>
+Date: Wed, 24 Jan 2018 11:21:37 +0000 (+0100)
+Subject: batman-adv: always assume 2-byte packet alignment
+X-Git-Url: https://git.open-mesh.org/batman-adv.git/commitdiff_plain/0509fc0c128ba2891770305c57c9b6a3a61ea7bd
+
+batman-adv: always assume 2-byte packet alignment
+
+NIC drivers generally try to ensure that the "network header" is aligned
+to a 4-byte boundary. This is not always possible: When Ethernet frames are
+encapsulated in other packets with 4-byte aligned headers, the inner
+Ethernet header will have 4-byte alignment, and in consequence, the inner
+network header is aligned to 2, but not to 4 bytes.
+
+Most parts of batman-adv only care about 2-byte alignment; in particular,
+no unaligned accesses occur in performance-critical paths that handle
+actual payload data. This is not true for OGM handling: the seqno and crc
+fields are accessed as 32-bit values. To avoid these unaligned accesses,
+this patch reduces the expected packet alignment to 2 bytes for all of
+batadv's packet types.
+
+As no unaligned accesses existed on the performance-critical paths anyways,
+this chance does have any (positive or negative) effect on performance, but
+it still makes sense to avoid these accesses to prevent log noise when
+examining other unaligned accesses in the kernel while batman-adv is
+active.
+
+Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
+Signed-off-by: Sven Eckelmann <sven@narfation.org>
+---
+
+diff --git a/include/uapi/linux/batadv_packet.h b/include/uapi/linux/batadv_packet.h
+index daefd72..894d8d2 100644
+--- a/include/uapi/linux/batadv_packet.h
++++ b/include/uapi/linux/batadv_packet.h
+@@ -196,8 +196,6 @@ struct batadv_bla_claim_dst {
+ __be16 group; /* group id */
+ };
+
+-#pragma pack()
+-
+ /**
+ * struct batadv_ogm_packet - ogm (routing protocol) packet
+ * @packet_type: batman-adv packet type, part of the general header
+@@ -222,9 +220,6 @@ struct batadv_ogm_packet {
+ __u8 reserved;
+ __u8 tq;
+ __be16 tvlv_len;
+- /* __packed is not needed as the struct size is divisible by 4,
+- * and the largest data type in this struct has a size of 4.
+- */
+ };
+
+ #define BATADV_OGM_HLEN sizeof(struct batadv_ogm_packet)
+@@ -249,9 +244,6 @@ struct batadv_ogm2_packet {
+ __u8 orig[ETH_ALEN];
+ __be16 tvlv_len;
+ __be32 throughput;
+- /* __packed is not needed as the struct size is divisible by 4,
+- * and the largest data type in this struct has a size of 4.
+- */
+ };
+
+ #define BATADV_OGM2_HLEN sizeof(struct batadv_ogm2_packet)
+@@ -405,7 +397,6 @@ struct batadv_icmp_packet_rr {
+ * misalignment of the payload after the ethernet header. It may also lead to
+ * leakage of information when the padding it not initialized before sending.
+ */
+-#pragma pack(2)
+
+ /**
+ * struct batadv_unicast_packet - unicast packet for network payload
+@@ -533,8 +524,6 @@ struct batadv_coded_packet {
+ __be16 coded_len;
+ };
+
+-#pragma pack()
+-
+ /**
+ * struct batadv_unicast_tvlv_packet - generic unicast packet with tvlv payload
+ * @packet_type: batman-adv packet type, part of the general header
+@@ -641,4 +630,6 @@ struct batadv_tvlv_mcast_data {
+ __u8 reserved[3];
+ };
+
++#pragma pack()
++
+ #endif /* _UAPI_LINUX_BATADV_PACKET_H_ */