kernel: fix an af_packet regression that was breaking PPPoE on 4.1+ (#20707)
authorFelix Fietkau <nbd@openwrt.org>
Wed, 11 Nov 2015 14:12:51 +0000 (14:12 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Wed, 11 Nov 2015 14:12:51 +0000 (14:12 +0000)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
SVN-Revision: 47459

target/linux/generic/patches-4.1/103-packet_allow_empty_payload.patch [new file with mode: 0644]
target/linux/generic/patches-4.3/103-packet_allow_empty_payload.patch [new file with mode: 0644]

diff --git a/target/linux/generic/patches-4.1/103-packet_allow_empty_payload.patch b/target/linux/generic/patches-4.1/103-packet_allow_empty_payload.patch
new file mode 100644 (file)
index 0000000..052f457
--- /dev/null
@@ -0,0 +1,17 @@
+Fix a regression in the af_packet code that was breaking PPPoE
+
+pppd sends packets with only a header and no payload.
+
+Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+
+--- a/net/packet/af_packet.c
++++ b/net/packet/af_packet.c
+@@ -2106,7 +2106,7 @@ static void tpacket_destruct_skb(struct
+ static bool ll_header_truncated(const struct net_device *dev, int len)
+ {
+       /* net device doesn't like empty head */
+-      if (unlikely(len <= dev->hard_header_len)) {
++      if (unlikely(len < dev->hard_header_len)) {
+               net_warn_ratelimited("%s: packet size is too short (%d <= %d)\n",
+                                    current->comm, len, dev->hard_header_len);
+               return true;
diff --git a/target/linux/generic/patches-4.3/103-packet_allow_empty_payload.patch b/target/linux/generic/patches-4.3/103-packet_allow_empty_payload.patch
new file mode 100644 (file)
index 0000000..3e38bdf
--- /dev/null
@@ -0,0 +1,17 @@
+Fix a regression in the af_packet code that was breaking PPPoE
+
+pppd sends packets with only a header and no payload.
+
+Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+
+--- a/net/packet/af_packet.c
++++ b/net/packet/af_packet.c
+@@ -2323,7 +2323,7 @@ static void tpacket_destruct_skb(struct
+ static bool ll_header_truncated(const struct net_device *dev, int len)
+ {
+       /* net device doesn't like empty head */
+-      if (unlikely(len <= dev->hard_header_len)) {
++      if (unlikely(len < dev->hard_header_len)) {
+               net_warn_ratelimited("%s: packet size is too short (%d <= %d)\n",
+                                    current->comm, len, dev->hard_header_len);
+               return true;