[Openvpn-devel] sitnl: fix ignoring EEXIST when sending a netlink command

Message ID 20200418094350.26349-1-a@unstable.cc
State Accepted
Headers show
Series [Openvpn-devel] sitnl: fix ignoring EEXIST when sending a netlink command | expand

Commit Message

Antonio Quartulli April 17, 2020, 11:43 p.m. UTC
The logic is to treat EEXIST as non-error because it means that the
address/soute we wanted to install already exists, therefore we can
move on and not fail.

However, this logic is currently based on checking errno == EEXIST.
This is wrong, because sitnl_send() does not set errno, but returns the
error directly as negative value.

Fix this issue by directly comparing the the return value with -EEXIST.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
---
 src/openvpn/networking_sitnl.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Gert Doering April 19, 2020, 12:03 a.m. UTC | #1
Acked-by: Gert Doering <gert@greenie.muc.de>

Proper error handling is hard, we should just always crash with ASSERT() :-)

Your patch has been applied to the master branch.

commit db3d737ba3ef9d83c5ceffa2f653d0ee4a8abb54
Author: Antonio Quartulli
Date:   Sat Apr 18 11:43:50 2020 +0200

     sitnl: fix ignoring EEXIST when sending a netlink command

     Signed-off-by: Antonio Quartulli <a@unstable.cc>
     Acked-by: Gert Doering <gert@greenie.muc.de>
     Message-Id: <20200418094350.26349-1-a@unstable.cc>
     URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg19777.html
     Signed-off-by: Gert Doering <gert@greenie.muc.de>


--
kind regards,

Gert Doering

Patch

diff --git a/src/openvpn/networking_sitnl.c b/src/openvpn/networking_sitnl.c
index 7adcb64c..713a213a 100644
--- a/src/openvpn/networking_sitnl.c
+++ b/src/openvpn/networking_sitnl.c
@@ -717,7 +717,7 @@  sitnl_addr_set(int cmd, uint32_t flags, int ifindex, sa_family_t af_family,
     }
 
     ret = sitnl_send(&req.n, 0, 0, NULL, NULL);
-    if ((ret < 0) && (errno == EEXIST))
+    if (ret == -EEXIST)
     {
         ret = 0;
     }
@@ -858,7 +858,7 @@  sitnl_route_set(int cmd, uint32_t flags, int ifindex, sa_family_t af_family,
     }
 
     ret = sitnl_send(&req.n, 0, 0, NULL, NULL);
-    if ((ret < 0) && (errno == EEXIST))
+    if (ret == -EEXIST)
     {
         ret = 0;
     }