]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
the EOF callback may free and close the socket
authorAlan T. DeKok <aland@freeradius.org>
Wed, 18 Jan 2023 19:39:16 +0000 (14:39 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 18 Jan 2023 19:49:47 +0000 (14:49 -0500)
so check for is_registered before calling ef->error(), as the
event_callback() in the EOF handler may have closed and freed
the socket.

src/lib/util/event.c

index f267d429e58620861e63589324d9d8aac68a428d..653b50d79e17e794acef7de793d6214660a694e2 100644 (file)
@@ -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;
                        }