dhclient appears to misinterpret the exit status of dhclient-script

Nash Kaminski nashkaminski at gmail.com
Fri Feb 8 02:45:46 UTC 2019


Hello,

I have been attempting to debug a peculiar issue with dhclient on a
vanilla FreeBSD 11.2 system where it appears that even if
dhclient-script returns nonzero when invoked in response to a protocol
timeout, dhclient continues as if the address was bound successfully,
as opposed to the protocol being restarted after the defined retry
interval.

After some investigation, it appears that the root cause of this
behavior is a result of the lower byte of the exit status being
returned, instead of the upper byte containing the return code, on
line 2319 of sbin/dhclient/dhclient.c (Ref:
https://github.com/freebsd/freebsd/blob/releng/11.2/sbin/dhclient/dhclient.c#L2319).

Making the following change makes dhclient behave as expected. Am I
missing something or is there indeed a significant bug here?

Index: sbin/dhclient/dhclient.c
===================================================================
--- sbin/dhclient/dhclient.c    (revision 342377)
+++ sbin/dhclient/dhclient.c    (working copy)
@@ -2316,7 +2316,7 @@
        if (ip)
                script_flush_env(ip->client);

-       return (wstatus & 0xff);
+       return WEXITSTATUS(wstatus);

}


- Nash


More information about the freebsd-net mailing list