From 391aca8d88070e502daaf9daedad99c016cf30db Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Jun 18 2017 11:32:51 +0000 Subject: Add valgrind-3.13.0-epoll_pwait.patch (#1462258) --- diff --git a/valgrind-3.13.0-epoll_pwait.patch b/valgrind-3.13.0-epoll_pwait.patch new file mode 100644 index 0000000..8a7516b --- /dev/null +++ b/valgrind-3.13.0-epoll_pwait.patch @@ -0,0 +1,68 @@ +commit 79865f0eed7cf0e0ad687ee0a59d59a1d505b514 +Author: mjw +Date: Sat Jun 17 13:49:22 2017 +0000 + + epoll_pwait can have a NULL sigmask. + + According to the epoll_pwait(2) man page: + + The sigmask argument may be specified as NULL, in which case + epoll_pwait() is equivalent to epoll_wait(). + + But doing that under valgrind gives: + + ==13887== Syscall param epoll_pwait(sigmask) points to unaddressable byte(s) + ==13887== at 0x4F2B940: epoll_pwait (epoll_pwait.c:43) + ==13887== by 0x400ADE: main (syscalls-2007.c:89) + ==13887== Address 0x0 is not stack'd, malloc'd or (recently) free'd + + This is because the sys_epoll_pwait wrapper has: + + if (ARG4) + PRE_MEM_READ( "epoll_pwait(sigmask)", ARG5, sizeof(vki_sigset_t) ); + + Which looks like a typo (ARG4 is timeout and ARG5 is sigmask). + + This shows up with newer glibc which translates an epoll_wait call into + an epoll_pwait call with NULL sigmask. + + Fix typo and add a testcase. + + https://bugs.kde.org/show_bug.cgi?id=381289 + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16451 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c +index 26e02fd..4120c1d 100644 +--- a/coregrind/m_syswrap/syswrap-linux.c ++++ b/coregrind/m_syswrap/syswrap-linux.c +@@ -1901,7 +1901,7 @@ PRE(sys_epoll_pwait) + int, maxevents, int, timeout, vki_sigset_t *, sigmask, + vki_size_t, sigsetsize); + PRE_MEM_WRITE( "epoll_pwait(events)", ARG2, sizeof(struct vki_epoll_event)*ARG3); +- if (ARG4) ++ if (ARG5) + PRE_MEM_READ( "epoll_pwait(sigmask)", ARG5, sizeof(vki_sigset_t) ); + } + POST(sys_epoll_pwait) +diff --git a/memcheck/tests/linux/syscalls-2007.c b/memcheck/tests/linux/syscalls-2007.c +index b61c6d5..5494623 100644 +--- a/memcheck/tests/linux/syscalls-2007.c ++++ b/memcheck/tests/linux/syscalls-2007.c +@@ -79,5 +79,16 @@ int main (void) + } + #endif + ++#if defined(HAVE_EPOLL_CREATE) && defined(HAVE_EPOLL_PWAIT) ++ { ++ int fd3; ++ struct epoll_event evs[10]; ++ ++ fd3 = epoll_create (10); ++ /* epoll_pwait can take a NULL sigmask. */ ++ epoll_pwait (fd3, evs, 10, 1, NULL); ++ } ++#endif ++ + return 0; + } diff --git a/valgrind.spec b/valgrind.spec index a2e8d5d..77ccb47 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -95,6 +95,9 @@ Patch3: valgrind-3.9.0-ldso-supp.patch # KDE#381272 ppc64 doesn't compile test_isa_2_06_partx.c without VSX support Patch4: valgrind-3.13.0-ppc64-check-no-vsx.patch +# KDE#381289 epoll_pwait can have a NULL sigmask. +Patch5: valgrind-3.13.0-epoll_pwait.patch + %if %{build_multilib} # Ensure glibc{,-devel} is installed for both multilib arches BuildRequires: /lib/libc.so.6 /usr/lib/libc.so /lib64/libc.so.6 /usr/lib64/libc.so @@ -213,6 +216,7 @@ Valgrind User Manual for details. %patch2 -p1 %patch3 -p1 %patch4 -p1 +%patch5 -p1 %build # We need to use the software collection compiler and binutils if available. @@ -415,10 +419,13 @@ echo ===============END TESTING=============== %endif %changelog +* Sat Jun 17 2017 Mark Wielaard +- Add valgrind-3.13.0-ppc64-check-no-vsx.patch +- Add valgrind-3.13.0-epoll_pwait.patch (#1462258) + * Thu Jun 15 2017 Mark Wielaard - 3.13.0-1 - valgrind 3.13.0 final. - Drop all upstreamed patches. -- Add valgrind-3.13.0-ppc64-check-no-vsx.patch * Tue Jun 6 2017 Mark Wielaard - 3.13.0-0.2.RC1 - Add valgrind-3.13.0-arm-dcache.patch