Our code to determine whether receive functionality will work with
ip6 gre depends on the return of -EEXIST but inet6_add_protocol()
returns a -1 on failure to grab the pointer via a cmpxchg op.  Just
set the error return to -EEXIST to help out the vport init function.

Reported-at: 
https://mail.openvswitch.org/pipermail/ovs-discuss/2019-January/048090.html
Reported-by: Ken Ajiro <[email protected]>
Signed-off-by: Greg Rose <[email protected]>
---
 datapath/linux/compat/ip6_gre.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/datapath/linux/compat/ip6_gre.c b/datapath/linux/compat/ip6_gre.c
index 1827852..2ffdda5 100644
--- a/datapath/linux/compat/ip6_gre.c
+++ b/datapath/linux/compat/ip6_gre.c
@@ -2802,6 +2802,13 @@ int rpl_ip6gre_init(void)
        if (err < 0) {
                pr_info("%s: can't add protocol\n", __func__);
                unregister_pernet_device(&ip6gre_net_ops);
+               /*
+                * inet6_add_protocol will return a -1 if it fails
+                * to grab the pointer but the vport initialization
+                * expects a return value of -EEXIST.  Set err to
+                * -EEXIST here to ensure proper handling.
+                */
+               err = -EEXIST;
                goto ip6_gre_loaded;
        }
 
-- 
1.8.3.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to