[Bug 1947099] [NEW] ipconfig does not honour user-requested timeouts in some cases

Launchpad Bug Tracker 1947099 at bugs.launchpad.net
Thu Oct 14 07:33:02 UTC 2021


You have been subscribed to a public bug by Sebastien Bacher (seb128):

In some cases, ipconfig can take longer than the user-specified
timeouts, causing unexpected delays.

in main.c, in function loop(), the process can go into
process_timeout_event() (or process_receive_event() ) and if it
encounters an error situation, will set an attempt to "try again later"
at time equal now + 10 seconds by setting

s->expire = now + 10;

This can happen at any time during the main event loop, which can end up
extending the user-specified timeout if "now + 10" is greater than
"start_time + user-specified-timeout".

I believe a patch like the following is needed to avoid this problem:

--- a/usr/kinit/ipconfig/main.c
+++ b/usr/kinit/ipconfig/main.c
@@ -437,6 +437,13 @@ static int loop(void)

                        if (timeout > s->expire - now.tv_sec)
                                timeout = s->expire - now.tv_sec;
+
+                       /* Compensate for already-lost time */
+                       gettimeofday(&now, NULL);
+                       if (now.tv_sec + timeout > start + loop_timeout) {
+                               timeout = loop_timeout - (now.tv_sec - start);
+                               printf("Lowered timeout to match user request = (%d s) \n", timeout);
+                       }
                }


I believe the current behaviour is buggy. This is confirmed when the following line is executed:


                        if (loop_timeout >= 0 &&
                            now.tv_sec - start >= loop_timeout) {
                                printf("IP-Config: no response after %d "
                                       "secs - giving up\n", loop_timeout);
                                rc = -1;
                                goto bail;
                        }


'loop_timeout' is the user-specified time-out. With a value of 2, in case of error, this line prints: 

IP-Config: no response after 2 secs - giving up


So it thinks that it waited 2 seconds - however, in reality it had actually waited for 10 seconds.

The suggested code-change ensures that the timeout that is actually used
never exceeds the user-specified timeout.

** Affects: klibc (Ubuntu)
     Importance: Undecided
         Status: New

** Affects: klibc (Ubuntu Bionic)
     Importance: Undecided
         Status: New

-- 
ipconfig does not honour user-requested timeouts in some cases
https://bugs.launchpad.net/bugs/1947099
You received this bug notification because you are a member of Ubuntu Sponsors Team, which is subscribed to the bug report.



More information about the Ubuntu-sponsors mailing list