[Dnsmasq-discuss] [BUG] Broken SIGHUP handling in 2.86, regression from 2.85

Simon Kelley simon at thekelleys.org.uk
Tue Feb 8 10:44:22 UTC 2022


Please could you send the entire strace, to me direct if you prefer. 
It's much easier to work out what file descriptor is in use, than 
therefore which code is broken if you have the syscalls that create them.


Cheers,

Simon.


On 08/02/2022 09:55, Charlie Turner wrote:
> `dnsmasq' has regressed in its handling of SIGHUP between 2.85 and
> 2.86. The `strace' record shows correct behaviour.
> 
> When `dnsmasq' boots, but before serving any `BOOTP=/=DHCP' requests, I
> can send as many `SIGHUPs' as I like to have the service reread its
> configuration files without restarting it. `strace' looks like this
> (for
> reference to a later capture),
> 
> --- SIGHUP {si_signo=SIGHUP, si_code=SI_USER, si_pid=2127, si_uid=0} --
> -
>   │getpid()                                = 492050
> 
> I can repeat this `SIGHUP' as many times as I want, successfully.
> 
> When I network boot a machine on the interface `dnsmasq' is listening,
> `dnsmasq' enters a syscall. Sending a `SIGHUP' now causes a `SIGABRT',
> 
> ) = ? ERESTART_RESTARTBLOCK (Interrupted by signal)
> │--- SIGHUP {si_signo=SIGHUP, si_code=SI_USER, si_pid=2127, si_uid=0} -
> --
> │getpid()                                = 485420
> │writev(10, [{iov_base="\1\0\0\0\0\0\0\0\0\0\0\0", iov_len=12}], 1) =
> 12
> │rt_sigreturn({mask=[]})                 = -1 EINTR (Interrupted system
> call)
> │poll([{fd=4, events=POLLIN}, {fd=5, events=POLLIN}, {fd=6,
> events=POLLIN}, {fd=7, events=POLLIN}, {
> │fd=8, events=POLLIN}, {fd=9, events=POLLIN}], 6, -1) = 1 ([{fd=9,
> revents=POLLIN}])
> │read(9, "\1\0\0\0\0\0\0\0\0\0\0\0", 12) = 12
> │writev(2, [{iov_base="free(): invalid pointer", iov_len=23},
> {iov_base="\n", iov_len=1}], 2) = 24
> │mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
> 0) = 0x7ff941ac8000
> │rt_sigprocmask(SIG_UNBLOCK, [ABRT], NULL, 8) = 0
> │rt_sigprocmask(SIG_BLOCK, ~[RTMIN RT_1], [], 8) = 0
> │getpid()                                = 485420
> │gettid()                                = 485420
> │tgkill(485420, 485420, SIGABRT)         = 0
> │rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
> │--- SIGABRT {si_signo=SIGABRT, si_code=SI_TKILL, si_pid=485420,
> si_uid=65534} ---
> │+++ killed by SIGABRT +++
> 
> I can see `dnsmasq' is within some syscall, and is not handling the
> restart request correctly.
> 
> B.R.
> 
>    Charlie.
> 
> _______________________________________________
> Dnsmasq-discuss mailing list
> Dnsmasq-discuss at lists.thekelleys.org.uk
> https://lists.thekelleys.org.uk/cgi-bin/mailman/listinfo/dnsmasq-discuss



More information about the Dnsmasq-discuss mailing list