From: Alan T. DeKok Date: Wed, 18 Jan 2023 19:39:16 +0000 (-0500) Subject: the EOF callback may free and close the socket X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f6b2211d8150a72ee93558720c066ec1e7dc460c;p=thirdparty%2Ffreeradius-server.git the EOF callback may free and close the socket so check for is_registered before calling ef->error(), as the event_callback() in the EOF handler may have closed and freed the socket. --- diff --git a/src/lib/util/event.c b/src/lib/util/event.c index f267d429e58..653b50d79e1 100644 --- a/src/lib/util/event.c +++ b/src/lib/util/event.c @@ -2543,9 +2543,10 @@ void fr_event_service(fr_event_list_t *el) fd_errno = el->events[i].data; ev_error: /* - * Call the error handler + * Call the error handler, but only if the socket hasn't been deleted at EOF + * below. */ - if (ef->error) ef->error(el, ef->fd, flags, fd_errno, ef->uctx); + if (ef->is_registered && ef->error) ef->error(el, ef->fd, flags, fd_errno, ef->uctx); TALLOC_FREE(ef); continue; }