https://bugs.kde.org/show_bug.cgi?id=359871

--- Comment #4 from Steven Smith <so...@archy.org.uk> ---
The reason that sanitize_client_sigmask() doesn't help here is that ppoll()
sets its own temporary signal mask, independent of the normal thread one, and
sanitization is only applied to the thread's mask. The special mask used by
ppoll() is passed through verbatim from the client to the kernel, so if the
client says ``block SIGVGKILL'', that's exactly what happens.

I don't know a great deal (or anything, really) about the Valgrind internals,
but I imagine the correct fix would involve applying sanitization to the
ppoll() mask as well. My first attempt at a fix was to have the PRE() hook copy
the necessary bits into monitor memory and then VG_(do_syscall) itself to
actually run the call itself, except that then you've unblocked signals outside
of the blksys_setup/blksys_finished range, which seems to confuse
VG_(fixup_guest_state_after_syscall_interrupted). Extending the core signal
handling logic enough to handle that seemed like it was going to be hairy;
hence giving up and just modifying the client's sigmask in-place. Which seems
to work, and was certainly enough that the program I was working on started
running under Valgrind, but would perhaps cause problems for some other
clients?

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to