From: Florian Krohm Date: Tue, 21 Oct 2014 07:20:20 +0000 (+0000) Subject: Add support for ioctl(fd, TIOCSIG, signal_number) which used X-Git-Tag: svn/VALGRIND_3_11_0~902 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=17fe8c0a09c195bed46db0049466360736597557;p=thirdparty%2Fvalgrind.git Add support for ioctl(fd, TIOCSIG, signal_number) which used to issue a false complaint. Fixes BZ #339706 Source patch by David Herrmann (dh.herrmann@gmail.com). Testcase by myself. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14646 --- diff --git a/NEWS b/NEWS index c99ed3092b..f1d76c901e 100644 --- a/NEWS +++ b/NEWS @@ -42,6 +42,7 @@ where XXXXXX is the bug number as listed below. 339688 Mac-specific ASM does not support .version directive (cpuid, tronical and pushfpopf tests) +339706 Fix false positive for ioctl(TIOCSIG) on linux 339721 assertion 'check_sibling == sibling' failed in readdwarf3.c ... 339789 Fix none/tests/execve test on Mac OS X 10.9 339808 Fix none/tests/rlimit64_nofile test on Mac OS X 10.9 diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index 92539475de..99091a0199 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -5481,6 +5481,7 @@ PRE(sys_ioctl) case VKI_TCXONC: case VKI_TCSBRKP: case VKI_TCFLSH: + case VKI_TIOCSIG: /* These just take an int by value */ break; case VKI_TIOCGWINSZ: @@ -8270,6 +8271,7 @@ POST(sys_ioctl) case VKI_TCXONC: case VKI_TCSBRKP: case VKI_TCFLSH: + case VKI_TIOCSIG: break; case VKI_TIOCGWINSZ: POST_MEM_WRITE( ARG3, sizeof(struct vki_winsize) ); diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h index 2d81e3f8ea..9dadf585ab 100644 --- a/include/vki/vki-linux.h +++ b/include/vki/vki-linux.h @@ -2955,6 +2955,10 @@ struct vki_getcpu_cache { #define VKI_FIOQSIZE 0x5460 /* Value differs on some platforms */ #endif +#ifndef VKI_TIOCSIG +#define VKI_TIOCSIG _VKI_IOW('T', 0x36, int) /* Value differs on some platforms */ +#endif + //---------------------------------------------------------------------- // From kernel/common/include/linux/ashmem.h //---------------------------------------------------------------------- diff --git a/memcheck/tests/linux/Makefile.am b/memcheck/tests/linux/Makefile.am index 9755f5c21c..d8a7d4d941 100644 --- a/memcheck/tests/linux/Makefile.am +++ b/memcheck/tests/linux/Makefile.am @@ -6,6 +6,7 @@ dist_noinst_SCRIPTS = filter_stderr EXTRA_DIST = \ brk.stderr.exp brk.vgtest \ capget.vgtest capget.stderr.exp capget.stderr.exp2 \ + ioctl-tiocsig.vgtest ioctl-tiocsig.stderr.exp \ lsframe1.vgtest lsframe1.stdout.exp lsframe1.stderr.exp \ lsframe2.vgtest lsframe2.stdout.exp lsframe2.stderr.exp \ rfcomm.vgtest rfcomm.stderr.exp \ @@ -24,6 +25,7 @@ EXTRA_DIST = \ check_PROGRAMS = \ brk \ capget \ + ioctl-tiocsig \ getregset \ lsframe1 \ lsframe2 \ diff --git a/memcheck/tests/linux/ioctl-tiocsig.c b/memcheck/tests/linux/ioctl-tiocsig.c new file mode 100644 index 0000000000..1738066fa0 --- /dev/null +++ b/memcheck/tests/linux/ioctl-tiocsig.c @@ -0,0 +1,7 @@ +#include + +int main() +{ + ioctl(9, TIOCSIG, 9); + return 0; +} diff --git a/memcheck/tests/linux/ioctl-tiocsig.stderr.exp b/memcheck/tests/linux/ioctl-tiocsig.stderr.exp new file mode 100644 index 0000000000..e69de29bb2 diff --git a/memcheck/tests/linux/ioctl-tiocsig.vgtest b/memcheck/tests/linux/ioctl-tiocsig.vgtest new file mode 100644 index 0000000000..2e75ad552a --- /dev/null +++ b/memcheck/tests/linux/ioctl-tiocsig.vgtest @@ -0,0 +1,2 @@ +prog: ioctl-tiocsig +vgopts: -q