diff options
Diffstat (limited to 'drivers/net/wireguard/queueing.h')
| -rw-r--r-- | drivers/net/wireguard/queueing.h | 10 | 
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/net/wireguard/queueing.h b/drivers/net/wireguard/queueing.h index fecb559cbdb6..3432232afe06 100644 --- a/drivers/net/wireguard/queueing.h +++ b/drivers/net/wireguard/queueing.h @@ -66,7 +66,7 @@ struct packet_cb {  #define PACKET_PEER(skb) (PACKET_CB(skb)->keypair->entry.peer)  /* Returns either the correct skb->protocol value, or 0 if invalid. */ -static inline __be16 wg_skb_examine_untrusted_ip_hdr(struct sk_buff *skb) +static inline __be16 wg_examine_packet_protocol(struct sk_buff *skb)  {  	if (skb_network_header(skb) >= skb->head &&  	    (skb_network_header(skb) + sizeof(struct iphdr)) <= @@ -81,6 +81,12 @@ static inline __be16 wg_skb_examine_untrusted_ip_hdr(struct sk_buff *skb)  	return 0;  } +static inline bool wg_check_packet_protocol(struct sk_buff *skb) +{ +	__be16 real_protocol = wg_examine_packet_protocol(skb); +	return real_protocol && skb->protocol == real_protocol; +} +  static inline void wg_reset_packet(struct sk_buff *skb)  {  	skb_scrub_packet(skb, true); @@ -94,8 +100,8 @@ static inline void wg_reset_packet(struct sk_buff *skb)  	skb->dev = NULL;  #ifdef CONFIG_NET_SCHED  	skb->tc_index = 0; -	skb_reset_tc(skb);  #endif +	skb_reset_redirect(skb);  	skb->hdr_len = skb_headroom(skb);  	skb_reset_mac_header(skb);  	skb_reset_network_header(skb);  |