diff --git a/0001-lib-tevent-a-cleaner-fix-for-be4ac227842530d484659f.patch b/0001-lib-tevent-a-cleaner-fix-for-be4ac227842530d484659f.patch new file mode 100644 index 0000000..42656f4 --- /dev/null +++ b/0001-lib-tevent-a-cleaner-fix-for-be4ac227842530d484659f.patch @@ -0,0 +1,49 @@ +From 455d44d9618afdc1d1f4198ae9f64ccc56dee62f Mon Sep 17 00:00:00 2001 +From: Rusty Russell +Date: Tue, 22 Sep 2009 10:32:10 +0930 +Subject: [PATCH] lib/tevent: a cleaner fix for be4ac227842530d484659f2db683453366326d8b segv + +Revert 23abcd2318c69753aa2a144e1dc0f9cf9efdb705 and fix logic bug. + +The current code loops through the event contexts, when it sees a different +one, it notifies the current one (ev) and updates ev to point to the new one. + +This is dumb, because: +(1) ev starts as NULL, so this code crashes, and +(2) The final context will not be notified. + +The correct fix for this is to update ev to the new one, then notify it. +Volker's fix works because we currently always have one event context. + +Signed-off-by: Rusty Russell +--- + lib/tevent/tevent_signal.c | 8 +------- + 1 files changed, 1 insertions(+), 7 deletions(-) + +diff --git a/lib/tevent/tevent_signal.c b/lib/tevent/tevent_signal.c +index 0ca2a27..d3325b6 100644 +--- a/lib/tevent/tevent_signal.c ++++ b/lib/tevent/tevent_signal.c +@@ -90,18 +90,12 @@ static void tevent_common_signal_handler(int signum) + SIG_INCREMENT(sig_state->signal_count[signum]); + SIG_INCREMENT(sig_state->got_signal); + +- if (sig_state->sig_handlers[signum] != NULL) { +- ev = sig_state->sig_handlers[signum]->se->event_ctx; +- /* doesn't matter if this pipe overflows */ +- res = write(ev->pipe_fds[1], &c, 1); +- } +- + /* Write to each unique event context. */ + for (sl = sig_state->sig_handlers[signum]; sl; sl = sl->next) { + if (sl->se->event_ctx != ev) { ++ ev = sl->se->event_ctx; + /* doesn't matter if this pipe overflows */ + res = write(ev->pipe_fds[1], &c, 1); +- ev = sl->se->event_ctx; + } + } + +-- +1.6.2.5 + diff --git a/libtevent.spec b/libtevent.spec index ab4b82a..5b17199 100644 --- a/libtevent.spec +++ b/libtevent.spec @@ -1,6 +1,6 @@ Name: libtevent Version: 0.9.8 -Release: 3%{?dist} +Release: 4%{?dist} Group: System Environment/Daemons Summary: The tevent library License: LGPLv3+ @@ -70,7 +70,7 @@ rm -rf $RPM_BUILD_ROOT %postun -p /sbin/ldconfig %changelog -* Wed Sep 23 2009 Simo Sorce - 0.9.8-3 +* Wed Sep 23 2009 Simo Sorce - 0.9.8-4 - Add patch to fix a segfault case * Wed Sep 16 2009 Simo Sorce - 0.9.8-2