All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] virtio: Work around frames incorrectly marked as gso
@ 2019-12-09 10:48 ` anton.ivanov
  0 siblings, 0 replies; 47+ messages in thread
From: anton.ivanov @ 2019-12-09 10:48 UTC (permalink / raw)
  To: netdev; +Cc: linux-um, jasowang, mst, virtualization, Anton Ivanov

From: Anton Ivanov <anton.ivanov@cambridgegreys.com>

Some of the frames marked as GSO which arrive at
virtio_net_hdr_from_skb() have no GSO_TYPE, no
fragments (data_len = 0) and length significantly shorter
than the MTU (752 in my experiments).

This is observed on raw sockets reading off vEth interfaces
in all 4.x and 5.x kernels I tested.

These frames are reported as invalid while they are in fact
gso-less frames.

This patch marks the vnet header as no-GSO for them instead
of reporting it as invalid.

Signed-off-by: Anton Ivanov <anton.ivanov@cambridgegreys.com>
---
 include/linux/virtio_net.h | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h
index 0d1fe9297ac6..d90d5cff1b9a 100644
--- a/include/linux/virtio_net.h
+++ b/include/linux/virtio_net.h
@@ -112,8 +112,12 @@ static inline int virtio_net_hdr_from_skb(const struct sk_buff *skb,
 			hdr->gso_type = VIRTIO_NET_HDR_GSO_TCPV4;
 		else if (sinfo->gso_type & SKB_GSO_TCPV6)
 			hdr->gso_type = VIRTIO_NET_HDR_GSO_TCPV6;
-		else
-			return -EINVAL;
+		else {
+			if (skb->data_len == 0)
+				hdr->gso_type = VIRTIO_NET_HDR_GSO_NONE;
+			else
+				return -EINVAL;
+		}
 		if (sinfo->gso_type & SKB_GSO_TCP_ECN)
 			hdr->gso_type |= VIRTIO_NET_HDR_GSO_ECN;
 	} else
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [PATCH] virtio: Work around frames incorrectly marked as gso
@ 2019-12-09 10:48 anton.ivanov
  0 siblings, 0 replies; 47+ messages in thread
From: anton.ivanov @ 2019-12-09 10:48 UTC (permalink / raw)
  To: netdev; +Cc: virtualization, linux-um, Anton Ivanov, mst

From: Anton Ivanov <anton.ivanov@cambridgegreys.com>

Some of the frames marked as GSO which arrive at
virtio_net_hdr_from_skb() have no GSO_TYPE, no
fragments (data_len = 0) and length significantly shorter
than the MTU (752 in my experiments).

This is observed on raw sockets reading off vEth interfaces
in all 4.x and 5.x kernels I tested.

These frames are reported as invalid while they are in fact
gso-less frames.

This patch marks the vnet header as no-GSO for them instead
of reporting it as invalid.

Signed-off-by: Anton Ivanov <anton.ivanov@cambridgegreys.com>
---
 include/linux/virtio_net.h | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h
index 0d1fe9297ac6..d90d5cff1b9a 100644
--- a/include/linux/virtio_net.h
+++ b/include/linux/virtio_net.h
@@ -112,8 +112,12 @@ static inline int virtio_net_hdr_from_skb(const struct sk_buff *skb,
 			hdr->gso_type = VIRTIO_NET_HDR_GSO_TCPV4;
 		else if (sinfo->gso_type & SKB_GSO_TCPV6)
 			hdr->gso_type = VIRTIO_NET_HDR_GSO_TCPV6;
-		else
-			return -EINVAL;
+		else {
+			if (skb->data_len == 0)
+				hdr->gso_type = VIRTIO_NET_HDR_GSO_NONE;
+			else
+				return -EINVAL;
+		}
 		if (sinfo->gso_type & SKB_GSO_TCP_ECN)
 			hdr->gso_type |= VIRTIO_NET_HDR_GSO_ECN;
 	} else
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 47+ messages in thread

end of thread, other threads:[~2020-02-20 19:33 UTC | newest]

Thread overview: 47+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-09 10:48 [PATCH] virtio: Work around frames incorrectly marked as gso anton.ivanov
2019-12-09 10:48 ` anton.ivanov
2019-12-09 10:54 ` Johannes Berg
2019-12-09 10:54 ` Johannes Berg
2019-12-09 10:54   ` Johannes Berg
2020-02-10 16:55 ` Anton Ivanov
2020-02-10 16:55   ` Anton Ivanov
2020-02-11  2:51   ` Jason Wang
2020-02-11  2:51     ` Jason Wang
2020-02-11  7:42     ` Anton Ivanov
2020-02-11  7:42       ` Anton Ivanov
2020-02-11 10:37       ` Michael S. Tsirkin
2020-02-11 10:37         ` Michael S. Tsirkin
2020-02-12 10:03         ` Anton Ivanov
2020-02-12 10:03           ` Anton Ivanov
2020-02-12 10:19           ` Michael S. Tsirkin
2020-02-12 10:19             ` Michael S. Tsirkin
2020-02-12 11:17             ` Anton Ivanov
2020-02-12 11:17               ` Anton Ivanov
2020-02-12 17:38         ` Anton Ivanov
2020-02-12 17:38           ` Anton Ivanov
2020-02-13  3:31           ` Jason Wang
2020-02-13  3:31             ` Jason Wang
2020-02-13 11:07             ` Anton Ivanov
2020-02-13 11:07               ` Anton Ivanov
2020-02-13 10:00           ` Michael S. Tsirkin
2020-02-13 10:00             ` Michael S. Tsirkin
2020-02-13 10:00             ` Michael S. Tsirkin
2020-02-13 11:12             ` Anton Ivanov
2020-02-13 11:12               ` Anton Ivanov
2020-02-13 13:12               ` Michael S. Tsirkin
2020-02-13 13:12                 ` Michael S. Tsirkin
2020-02-13 15:44             ` Eric Dumazet
2020-02-13 15:44               ` Eric Dumazet
2020-02-13 15:44               ` Eric Dumazet
2020-02-13 15:53               ` Michael S. Tsirkin
2020-02-13 15:53                 ` Michael S. Tsirkin
2020-02-13 15:53                 ` Michael S. Tsirkin
2020-02-13 16:23                 ` Anton Ivanov
2020-02-13 16:23                   ` Anton Ivanov
2020-02-13 16:37                   ` Michael S. Tsirkin
2020-02-13 16:37                     ` Michael S. Tsirkin
2020-02-20  7:58                   ` Michael S. Tsirkin
2020-02-20  7:58                     ` Michael S. Tsirkin
2020-02-20 19:33                     ` Anton Ivanov
2020-02-20 19:33                       ` Anton Ivanov
  -- strict thread matches above, loose matches on Subject: below --
2019-12-09 10:48 anton.ivanov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.