[Openvpn-devel,v2] Break 'try 256 dco devices' loop on EPERM

Message ID 20220804082502.1750074-1-gert@greenie.muc.de
State Accepted
Headers show
Series [Openvpn-devel,v2] Break 'try 256 dco devices' loop on EPERM | expand

Commit Message

Gert Doering Aug. 3, 2022, 10:25 p.m. UTC
If we get a permission denied error on one DCO device, trying 255 more
times will not succeed, and just fill the log file with errors.

Also, remove the msg() call there because it was at debug level
(needed --verb 4 to be seen), didn't see the correct errno, and the
sitnl code already prints the error.

v2: use "else if"

Signed-off-by: Gert Doering <gert@greenie.muc.de>
---
 src/openvpn/tun.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

Comments

Antonio Quartulli Aug. 3, 2022, 11:40 p.m. UTC | #1
Hi,

On 04/08/2022 10:25, Gert Doering wrote:
> If we get a permission denied error on one DCO device, trying 255 more
> times will not succeed, and just fill the log file with errors.
> 
> Also, remove the msg() call there because it was at debug level
> (needed --verb 4 to be seen), didn't see the correct errno, and the
> sitnl code already prints the error.
> 
> v2: use "else if"
> 
> Signed-off-by: Gert Doering <gert@greenie.muc.de>

Acked-by: Antonio Quartulli <a@unstable.cc>
Gert Doering Aug. 5, 2022, 1:01 a.m. UTC | #2
Of course I have tested this, very scientifically, like "do two runs
with and without sufficient permissions on a DCO-enabled system" :-)

Patch has been applied to the master branch.

commit 78c02dd12bcfe7c4b4e96ea534b39ade9ee2c4d6
Author: Gert Doering
Date:   Thu Aug 4 10:25:02 2022 +0200

     Break 'try 256 dco devices' loop on EPERM

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


--
kind regards,

Gert Doering

Patch

diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c
index 02ded4d7..af283aae 100644
--- a/src/openvpn/tun.c
+++ b/src/openvpn/tun.c
@@ -1883,13 +1883,18 @@  open_tun_dco_generic(const char *dev, const char *dev_type,
         {
             openvpn_snprintf(dynamic_name, sizeof(dynamic_name),
                              "%s%d", dev, i);
-            if (open_tun_dco(tt, ctx, dynamic_name) == 0)
+            int ret = open_tun_dco(tt, ctx, dynamic_name);
+            if (ret == 0)
             {
                 dynamic_opened = true;
                 msg(M_INFO, "DCO device %s opened", dynamic_name);
                 break;
             }
-            msg(D_READ_WRITE | M_ERRNO, "Tried opening %s (failed)", dynamic_name);
+            /* "permission denied" won't succeed if we try 256 times */
+            else if (ret == -EPERM)
+            {
+                break;
+            }
         }
         if (!dynamic_opened)
         {