From: Greg Rose Date: Tue, 22 Jan 2019 23:42:55 +0000 (-0800) Subject: datapath: return -EEXIST if inet6_add_protocol fails X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=df4f576cf985bb92023ba8712abc0d0ca392639e;p=ovs.git datapath: return -EEXIST if inet6_add_protocol fails 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 Reported-at: https://mail.openvswitch.org/pipermail/ovs-discuss/2019-January/048090.html Reported-by: Ken Ajiro Signed-off-by: Greg Rose Signed-off-by: Ben Pfaff --- diff --git a/datapath/linux/compat/ip6_gre.c b/datapath/linux/compat/ip6_gre.c index 182785273..2ffdda5e1 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; }