diff options
Diffstat (limited to 'drivers/net/wireguard/receive.c')
| -rw-r--r-- | drivers/net/wireguard/receive.c | 7 | 
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/net/wireguard/receive.c b/drivers/net/wireguard/receive.c index 4a153894cee2..da3b782ab7d3 100644 --- a/drivers/net/wireguard/receive.c +++ b/drivers/net/wireguard/receive.c @@ -56,7 +56,7 @@ static int prepare_skb_header(struct sk_buff *skb, struct wg_device *wg)  	size_t data_offset, data_len, header_len;  	struct udphdr *udp; -	if (unlikely(wg_skb_examine_untrusted_ip_hdr(skb) != skb->protocol || +	if (unlikely(!wg_check_packet_protocol(skb) ||  		     skb_transport_header(skb) < skb->head ||  		     (skb_transport_header(skb) + sizeof(struct udphdr)) >  			     skb_tail_pointer(skb))) @@ -388,7 +388,7 @@ static void wg_packet_consume_data_done(struct wg_peer *peer,  	 */  	skb->ip_summed = CHECKSUM_UNNECESSARY;  	skb->csum_level = ~0; /* All levels */ -	skb->protocol = wg_skb_examine_untrusted_ip_hdr(skb); +	skb->protocol = wg_examine_packet_protocol(skb);  	if (skb->protocol == htons(ETH_P_IP)) {  		len = ntohs(ip_hdr(skb)->tot_len);  		if (unlikely(len < sizeof(struct iphdr))) @@ -587,8 +587,7 @@ void wg_packet_receive(struct wg_device *wg, struct sk_buff *skb)  		wg_packet_consume_data(wg, skb);  		break;  	default: -		net_dbg_skb_ratelimited("%s: Invalid packet from %pISpfsc\n", -					wg->dev->name, skb); +		WARN(1, "Non-exhaustive parsing of packet header lead to unknown packet type!\n");  		goto err;  	}  	return;  |