X Input drivers, such as xf86-input-synaptics, tend to do all of their processing in a SIGIO signal handler. This processing often involves creating, modifying or canceling a timer. Any of these operations may modify the global "timers" array. Therefore, all accesses of this global must be done in critical secitions during which signals are blocked.
Otherwise, for example, a signal may clear the last timer between, which sets timers global to NULL, between the NULL check and checking "expires", which causes a SEGV. A previous patch protected write accesses. However, this is not sufficient. Read accesses must also be protected from a signal occurring between when the timers is NULL checked and subsequent dereferences. This patchset also does some small clean up to the timer list processing. Although, the whole timer list should probably be rewritten someday using the more modern - and better tested - struct xorg_list... Daniel Kurtz (3): os: block signals when accessing global timer list os: refactor timer processing os: refactor CheckAllTimers os/WaitFor.c | 79 ++++++++++++++++++++++++++++++--------------------------- 1 files changed, 42 insertions(+), 37 deletions(-) -- 1.7.7.3 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel