4d9c3c1c79
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
100 lines
3.7 KiB
Diff
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_ */
|