Re: [PATCH net 1/2] vxlan: do not modify the shared tunnel info when PMTU triggers an ICMP reply
From: Vlad Buslov <hidden>
Date: 2022-01-31 17:55:56
On Mon 31 Jan 2022 at 15:26, Antoine Tenart [off-list ref] wrote:
Quoting Vlad Buslov (2022-01-31 12:26:47)quoted
On Fri 28 Jan 2022 at 19:01, Antoine Tenart [off-list ref] wrote:quoted
I finally had some time to look at this. Does the diff below fix your issue?Yes, with the patch applied I'm no longer able to reproduce memory leak. Thanks for fixing this!Thanks for testing. I'll send a formal patch, can I add your Tested-by?
Sure! Reported-by: Vlad Buslov <redacted> Tested-by: Vlad Buslov <redacted>
Also, do you know how to trigger the following code path in OVS https://elixir.bootlin.com/linux/latest/source/net/openvswitch/actions.c#L944 ? Would be good (not required) to test it, to ensure the fix doesn't break it.
Sorry, I don't. We mostly concentrate on testing hardware offload-specific code paths (e.g. TC).
Thanks, Antoinequoted
quoted
diff --git a/include/net/dst_metadata.h b/include/net/dst_metadata.h index 14efa0ded75d..90a7a4daea9c 100644 --- a/include/net/dst_metadata.h +++ b/include/net/dst_metadata.h@@ -110,8 +110,8 @@ static inline struct metadata_dst *tun_rx_dst(int md_size) static inline struct metadata_dst *tun_dst_unclone(struct sk_buff *skb) { struct metadata_dst *md_dst = skb_metadata_dst(skb); - int md_size; struct metadata_dst *new_md; + int md_size, ret; if (!md_dst || md_dst->type != METADATA_IP_TUNNEL) return ERR_PTR(-EINVAL);@@ -123,8 +123,15 @@ static inline struct metadata_dst *tun_dst_unclone(struct sk_buff *skb) memcpy(&new_md->u.tun_info, &md_dst->u.tun_info, sizeof(struct ip_tunnel_info) + md_size); +#ifdef CONFIG_DST_CACHE + ret = dst_cache_init(&new_md->u.tun_info.dst_cache, GFP_ATOMIC); + if (ret) { + metadata_dst_free(new_md); + return ERR_PTR(ret); + } +#endif + skb_dst_drop(skb); - dst_hold(&new_md->dst); skb_dst_set(skb, &new_md->dst); return new_md; }