diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2012-05-10 10:04:36 -0300 |
---|---|---|
committer | Ben Hutchings <ben@decadent.org.uk> | 2012-05-31 00:43:51 +0100 |
commit | 13918f54a0987a9bcec568dd1c6300f1e8b1d05a (patch) | |
tree | c28bfd7a2bd863196a2be7e6a96c9cd7f36a95e2 /fs/ext3 | |
parent | b07291bbba3a0ce31a2a35b34b1e3e79c22e4b5b (diff) | |
download | kernel_samsung_smdk4412-13918f54a0987a9bcec568dd1c6300f1e8b1d05a.zip kernel_samsung_smdk4412-13918f54a0987a9bcec568dd1c6300f1e8b1d05a.tar.gz kernel_samsung_smdk4412-13918f54a0987a9bcec568dd1c6300f1e8b1d05a.tar.bz2 |
compat: Fix RT signal mask corruption via sigprocmask
commit b7dafa0ef3145c31d7753be0a08b3cbda51f0209 upstream.
compat_sys_sigprocmask reads a smaller signal mask from userspace than
sigprogmask accepts for setting. So the high word of blocked.sig[0]
will be cleared, releasing any potentially blocked RT signal.
This was discovered via userspace code that relies on get/setcontext.
glibc's i386 versions of those functions use sigprogmask instead of
rt_sigprogmask to save/restore signal mask and caused RT signal
unblocking this way.
As suggested by Linus, this replaces the sys_sigprocmask based compat
version with one that open-codes the required logic, including the merge
of the existing blocked set with the new one provided on SIG_SETMASK.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'fs/ext3')
0 files changed, 0 insertions, 0 deletions