]> git.proxmox.com Git - ovs.git/commitdiff
datapath: return -EEXIST if inet6_add_protocol fails
authorGreg Rose <gvrose8192@gmail.com>
Tue, 22 Jan 2019 23:42:55 +0000 (15:42 -0800)
committerBen Pfaff <blp@ovn.org>
Wed, 23 Jan 2019 19:46:05 +0000 (11:46 -0800)
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.

Reviewed-by: Yifeng Sun <pkusunyifeng@gmail.com>
Reported-at: https://mail.openvswitch.org/pipermail/ovs-discuss/2019-January/048090.html
Reported-by: Ken Ajiro <ken-ajiro@xr.jp.nec.com>
Signed-off-by: Greg Rose <gvrose8192@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
datapath/linux/compat/ip6_gre.c

index 182785273c6fa7a82b7c15cbec235d9417beeb7c..2ffdda5e1dc314296011ce5d6be988e2c5ca3e39 100644 (file)
@@ -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;
        }