epoll.c


Log

Author Commit Date CI Message
Nick Mathewson 5e0563ba 2009-05-12T18:27:45 Fix dangling pointer in epoll after epoll_recalc(). This is based on patch 2790759 from Kevin Springborn. His comments on sourceforge: Problem: The failure case is as follows: Event is added using epoll_add (a direct pointer is stored in the user_data section), epoll_recalc is called and the fds array is moved (invalidating the user_data pointer stored in epoll). epoll_dispatch is called for the added event and accesses evepoll based on the invalid pointer (set before the fds array was relocated). Solution: Dispatch has access to the epollop structure, so given the fd we can find the corresponding evepoll struct. Use data.fd instead of data.ptr and store the fd corresponding to the event. This way when epoll_recalc moves the fds array (and updates the fds array pointer in epollop), the evepoll calculation in dispatch still finds the valid evepoll struct. svn:r1282
Niels Provos f06b29b9 2009-03-12T17:03:21 off-by-one error in epoll_recalc; reported by Victor Goya svn:r1124
Niels Provos dfa9cb5d 2008-12-13T06:12:05 from trunk: constify structs; from Andrei Nigmatulin svn:r960
Nick Mathewson 212523d1 2008-04-11T20:02:32 r19310@catbus: nickm | 2008-04-11 16:02:23 -0400 Backport fix for epoll-on-linux bug (#1908866). svn:r708
Nick Mathewson bb1dd9e7 2008-04-10T19:35:57 r19306@catbus: nickm | 2008-04-10 15:34:27 -0400 Backport fix for bug 1938754: do not warn when epoll_create() fails with ENOSYS. svn:r707
Niels Provos 9e92909c 2008-03-29T01:47:04 from trunk: make event methods static so that they are not exported; from Andrei Nigmatulin svn:r693
Nick Mathewson bd6fae1d 2008-02-23T19:18:39 r18373@catbus: nickm | 2008-02-23 14:13:06 -0500 add missing "static" to epoll.c svn:r656
Niels Provos b23f1dbe 2007-12-14T07:18:02 from trunk: move EV_PERSIST handling out of the event backends svn:r592
Niels Provos 9a708389 2007-12-13T05:58:05 from trunk: remove obsolete recalc code svn:r586
Niels Provos 7717cec7 2007-11-27T06:15:36 from trunk: provide event_reinit() to reinitialized an event_base after fork - necessary for epoll/kqueue svn:r557
Niels Provos 6b4342db 2007-11-12T02:37:25 copy trunk to 1.4 svn:r512