hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/include/linux/virtio_net.h
....@@ -103,10 +103,18 @@
103103 if (gso_type && skb->network_header) {
104104 struct flow_keys_basic keys;
105105
106
- if (!skb->protocol)
107
- virtio_net_hdr_set_proto(skb, hdr);
106
+ if (!skb->protocol) {
107
+ __be16 protocol = dev_parse_header_protocol(skb);
108
+
109
+ if (!protocol)
110
+ virtio_net_hdr_set_proto(skb, hdr);
111
+ else if (!virtio_net_hdr_match_proto(protocol, hdr->gso_type))
112
+ return -EINVAL;
113
+ else
114
+ skb->protocol = protocol;
115
+ }
108116 retry:
109
- if (!skb_flow_dissect_flow_keys_basic(skb, &keys,
117
+ if (!skb_flow_dissect_flow_keys_basic(NULL, skb, &keys,
110118 NULL, 0, 0, 0,
111119 0)) {
112120 /* UFO does not specify ipv4 or 6: try both */