From df4f576cf985bb92023ba8712abc0d0ca392639e Mon Sep 17 00:00:00 2001 From: Greg Rose Date: Tue, 22 Jan 2019 15:42:55 -0800 Subject: [PATCH] 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 --- 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 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; } -- 2.39.2