Am 31.05.15 um 22:41 schrieb Gert Doering: > A signal (except SIGUSR1) received while waiting for getaddrinfo() is > considered fatal, so openvpn_getaddrinfo() is destroying the returned > information with freeaddrinfo(), but still signalled "success" (0) > to the caller - so if the caller accessed *res before checking > *signal_received, it would access just-free()ed memory, which on some > platforms still worked and on others caused a crash. > > Also, ensure that *ai is also NULLed in the caller now. > > Signed-off-by: Gert Doering <g...@greenie.muc.de> > --- > src/openvpn/socket.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/src/openvpn/socket.c b/src/openvpn/socket.c > index cf2dec3..034ccc1 100644 > --- a/src/openvpn/socket.c > +++ b/src/openvpn/socket.c > @@ -219,10 +219,13 @@ msg(M_INFO, "if(*signal_received)"); > } > else > { > + /* turn success into failure (interrupted syscall) */ > if (0 == status) { > ASSERT(res); > freeaddrinfo(*res); > - res = NULL; > + *res = NULL; > + status = EAI_SYSTEM; > + errno = EINTR; > } > goto done; > } ACK. The patch is doing the right thing.
Arne