Skip to content
代码片段 群组 项目
提交 6e2c1a40 编辑于 作者: Jason A. Donenfeld's avatar Jason A. Donenfeld
浏览文件

receive: pull IP header into head

上级 8215de68
分支
未找到相关标签
无相关合并请求
...@@ -206,6 +206,9 @@ void packet_consume_data_done(struct sk_buff *skb, struct wireguard_peer *peer, ...@@ -206,6 +206,9 @@ void packet_consume_data_done(struct sk_buff *skb, struct wireguard_peer *peer,
if (skb_network_header(skb) < skb->head) if (skb_network_header(skb) < skb->head)
goto dishonest_packet_size; goto dishonest_packet_size;
if (unlikely(!(pskb_network_may_pull(skb, sizeof(struct iphdr)) && (ip_hdr(skb)->version == 4 || (ip_hdr(skb)->version == 6 && pskb_network_may_pull(skb, sizeof(struct ipv6hdr)))))))
goto dishonest_packet_type;
skb->dev = dev; skb->dev = dev;
skb->ip_summed = CHECKSUM_UNNECESSARY; skb->ip_summed = CHECKSUM_UNNECESSARY;
skb->protocol = skb_examine_untrusted_ip_hdr(skb); skb->protocol = skb_examine_untrusted_ip_hdr(skb);
...@@ -221,6 +224,7 @@ void packet_consume_data_done(struct sk_buff *skb, struct wireguard_peer *peer, ...@@ -221,6 +224,7 @@ void packet_consume_data_done(struct sk_buff *skb, struct wireguard_peer *peer,
if (INET_ECN_is_ce(PACKET_CB(skb)->ds)) if (INET_ECN_is_ce(PACKET_CB(skb)->ds))
IP6_ECN_set_ce(skb, ipv6_hdr(skb)); IP6_ECN_set_ce(skb, ipv6_hdr(skb));
} else { } else {
dishonest_packet_type:
++dev->stats.rx_errors; ++dev->stats.rx_errors;
++dev->stats.rx_frame_errors; ++dev->stats.rx_frame_errors;
net_dbg_ratelimited("%s: Packet neither ipv4 nor ipv6 from peer %Lu (%pISpfsc)\n", netdev_pub(peer->device)->name, peer->internal_id, &peer->endpoint.addr); net_dbg_ratelimited("%s: Packet neither ipv4 nor ipv6 from peer %Lu (%pISpfsc)\n", netdev_pub(peer->device)->name, peer->internal_id, &peer->endpoint.addr);
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
想要评论请 注册