Thread (14 messages) 14 messages, 4 authors, 2022-01-31

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,
Antoine
quoted
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;
 }
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help