Your message dated Sat, 28 Sep 2013 01:54:39 +0200
with message-id <[email protected]>
and subject line races galore in wmaker signal handling (segfaults)
has caused the Debian Bug report #89514,
regarding races galore in wmaker signal handling (segfaults)
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
89514: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=89514
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: wmaker
Version: 0.61.1-4
Severity: normal

Summary: guys who had written wmaker signal handlers need to be
bashed with Stevens until the clue gets in.

        a) You can't call malloc(3) from the handler.
        b) You can't modify linked lists that are also modified from
the main code, unless main code blocks signals in critical areas.

Both rules are violated in wmaker. All versions, up to the current
one from upstream CVS. As the result, wmaker merrily segfaults if
signals happen in the wrong time (usually upon exit when we get a lot
of SIGCHLD, but it's just a matter of probability),

For 0.61.1-4:
* src/startup.c::handleSig() contains the following:
       if (!WDelayedActionSet) {
            WDelayedActionSet = 1;
            WMAddIdleHandler(delayedAction, NULL);
        }
WMAddIdleHandler() starts with calling malloc(). 'Nuff said. Instant
segfault if SIGCHLD comes in the middle of malloc(). Observed in the wild.

* Same code contains another race: WMAddIdleHandler() adds an entry into
the linked list. Quite possibly right in the middle of manipulations with
the same list (see WINGs/wevent.c). Our motto is "Segfaults Now"...

* handleSig() again, look at the WCHANGE_STATE(). Think how much good
it does if signal comes when main code is going to do WCHANGE_STATE()
itself.

        I don't see how to fix it without changes to wevent.c API.
We could preallocate structure for delayed action handler so that
handleSig() wouldn't have to allocate anything, but then we need a
new function (WMAddPreallocedHandler()). List manipulations outside
of the handleSig() probably need to be protected by blocking SIGCHLD, but
it can be too costly if we touch these lists often enough. WCHANGE_STATE()
either needs callers to block signals, or (more likely) should be
eliminated from handleSig() in favour of some sort of delayed handling
a-la SIGCHLD.

        Code is in bad need of audit for potential races - authors had
demonstrated complete lack of clue in writing async code. Sigh...



--- End Message ---
--- Begin Message ---
Hi,

this bug is very old. The curren wmaker version (0.95.5) doesn't have segfauls, 
and the window manager runs without problems.

Please, if you know how to reproduce a bug about this problem, then reopen this 
bug.

Thanks a lot.
kix
-- 
 .''`.  Rodolfo García Peñas (kix) <[email protected]>
: :'  : Proud Debian Developer
`. `'`  4096R / 3F48 0B8C C385 AD41 9E28  006A 7B1F 5490 72B7 4923
 `-     Debian - when you have better things to do than fixing systems

--- End Message ---

Reply via email to