diff options
Diffstat (limited to 'drivers/net/wireguard/queueing.h')
-rw-r--r-- | drivers/net/wireguard/queueing.h | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/net/wireguard/queueing.h b/drivers/net/wireguard/queueing.h index 866d46865f13..bab170b95938 100644 --- a/drivers/net/wireguard/queueing.h +++ b/drivers/net/wireguard/queueing.h @@ -74,17 +74,20 @@ static inline bool wg_check_packet_protocol(struct sk_buff *skb) static inline void wg_reset_packet(struct sk_buff *skb, bool encapsulating) { + const int pfmemalloc = skb->pfmemalloc; + u32 hash = skb->hash; u8 l4_hash = skb->l4_hash; u8 sw_hash = skb->sw_hash; - u32 hash = skb->hash; + skb_scrub_packet(skb, true); memset(&skb->headers_start, 0, offsetof(struct sk_buff, headers_end) - offsetof(struct sk_buff, headers_start)); + skb->pfmemalloc = pfmemalloc; if (encapsulating) { + skb->hash = hash; skb->l4_hash = l4_hash; skb->sw_hash = sw_hash; - skb->hash = hash; } skb->queue_mapping = 0; skb->nohdr = 0; @@ -93,13 +96,13 @@ static inline void wg_reset_packet(struct sk_buff *skb, bool encapsulating) 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); skb_reset_transport_header(skb); - skb_probe_transport_header(skb, 0); + skb_probe_transport_header(skb); skb_reset_inner_headers(skb); } |