3.15.0-12 - Add valgrind-3.15.0-ptrace-siginfo.patch
This commit is contained in:
parent
2f861f7e3e
commit
22441b0d82
170
valgrind-3.15.0-ptrace-siginfo.patch
Normal file
170
valgrind-3.15.0-ptrace-siginfo.patch
Normal file
@ -0,0 +1,170 @@
|
||||
commit 3bac39a10abf292d332bb20ab58c6dd5c28f9108
|
||||
Author: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
Date: Fri Mar 8 04:07:00 2019 +0100
|
||||
|
||||
include/vki: fix vki_siginfo_t definition on amd64, arm64, and ppc64
|
||||
|
||||
As it turned out, the size of vki_siginfo_t is incorrect on these 64-bit
|
||||
architectures:
|
||||
|
||||
(gdb) p sizeof(vki_siginfo_t)
|
||||
$1 = 136
|
||||
(gdb) ptype struct vki_siginfo
|
||||
type = struct vki_siginfo {
|
||||
int si_signo;
|
||||
int si_errno;
|
||||
int si_code;
|
||||
union {
|
||||
int _pad[29];
|
||||
struct {...} _kill;
|
||||
struct {...} _timer;
|
||||
struct {...} _rt;
|
||||
struct {...} _sigchld;
|
||||
struct {...} _sigfault;
|
||||
struct {...} _sigpoll;
|
||||
} _sifields;
|
||||
}
|
||||
|
||||
It looks like that for this architecture, __VKI_ARCH_SI_PREAMBLE_SIZE
|
||||
hasn't been defined properly, which resulted in incorrect
|
||||
VKI_SI_PAD_SIZE calculation (29 instead of 28).
|
||||
|
||||
<6a9e4> DW_AT_name : (indirect string, offset: 0xcf59): _sifields
|
||||
<6a9ef> DW_AT_data_member_location: 16
|
||||
|
||||
This issue has been discovered with strace's "make check-valgrind-memcheck",
|
||||
which produced false out-of-bounds writes on ptrace(PTRACE_GETSIGINFO) calls:
|
||||
|
||||
SYSCALL[24264,1](101) sys_ptrace ( 16898, 24283, 0x0, 0x606bd40 )
|
||||
==24264== Syscall param ptrace(getsiginfo) points to unaddressable byte(s)
|
||||
==24264== at 0x575C06E: ptrace (ptrace.c:45)
|
||||
==24264== by 0x443244: next_event (strace.c:2431)
|
||||
==24264== by 0x443D30: main (strace.c:2845)
|
||||
==24264== Address 0x606bdc0 is 0 bytes after a block of size 144 alloc'd
|
||||
|
||||
(Note that the address passed is 0x606bd40 and the address reported is
|
||||
0x606bdc0).
|
||||
|
||||
After the patch, no such errors observed.
|
||||
|
||||
* include/vki/vki-amd64-linux.h [__x86_64__ && __ILP32__]
|
||||
(__vki_kernel_si_clock_t): New typedef.
|
||||
[__x86_64__ && __ILP32__] (__VKI_ARCH_SI_CLOCK_T,
|
||||
__VKI_ARCH_SI_ATTRIBUTES): New macros.
|
||||
[__x86_64__ && !__ILP32__] (__VKI_ARCH_SI_PREAMBLE_SIZE): New macro,
|
||||
define to 4 ints.
|
||||
* include/vki/vki-arm64-linux.h (__VKI_ARCH_SI_PREAMBLE_SIZE): Likewise.
|
||||
* include/vki/vki-ppc64-linux.h [__powerpc64__] (__VKI_ARCH_SI_PREAMBLE_SIZE):
|
||||
Likewise.
|
||||
* include/vki/vki-linux.h [!__VKI_ARCH_SI_CLOCK_T]
|
||||
(__VKI_ARCH_SI_CLOCK_T): New macro, define to vki_clock_t.
|
||||
[!__VKI_ARCH_SI_ATTRIBUTES] (__VKI_ARCH_SI_ATTRIBUTES): New macro,
|
||||
define to nil.
|
||||
(struct vki_siginfo): Use __VKI_ARCH_SI_CLOCK_T type for _utime and
|
||||
_stime fields. Add __VKI_ARCH_SI_ATTRIBUTES.
|
||||
|
||||
Resolves: https://bugs.kde.org/show_bug.cgi?id=405201
|
||||
Reported-by: Dmitry V. Levin <ldv@altlinux.org>
|
||||
Signed-off-by: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
|
||||
diff --git a/include/vki/vki-amd64-linux.h b/include/vki/vki-amd64-linux.h
|
||||
index d6a5a77e6..fbd353aed 100644
|
||||
--- a/include/vki/vki-amd64-linux.h
|
||||
+++ b/include/vki/vki-amd64-linux.h
|
||||
@@ -297,6 +297,21 @@ struct vki_f_owner_ex {
|
||||
#define VKI_RLIMIT_CORE 4 /* max core file size */
|
||||
#define VKI_RLIMIT_NOFILE 7 /* max number of open files */
|
||||
|
||||
+//----------------------------------------------------------------------
|
||||
+// From linux-5.0.0/arch/x86/include/uapi/asm/siginfo.h
|
||||
+//----------------------------------------------------------------------
|
||||
+
|
||||
+/* We need that to ensure that sizeof(siginfo) == 128. */
|
||||
+#ifdef __x86_64__
|
||||
+# ifdef __ILP32__
|
||||
+typedef long long __vki_kernel_si_clock_t __attribute__((aligned(4)));
|
||||
+# define __VKI_ARCH_SI_CLOCK_T __vki_kernel_si_clock_t
|
||||
+# define __VKI_ARCH_SI_ATTRIBUTES __attribute__((aligned(8)))
|
||||
+# else
|
||||
+# define __VKI_ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
|
||||
+# endif
|
||||
+#endif
|
||||
+
|
||||
//----------------------------------------------------------------------
|
||||
// From linux-2.6.9/include/asm-x86_64/socket.h
|
||||
//----------------------------------------------------------------------
|
||||
diff --git a/include/vki/vki-arm64-linux.h b/include/vki/vki-arm64-linux.h
|
||||
index ecea8cc78..69fb3ed00 100644
|
||||
--- a/include/vki/vki-arm64-linux.h
|
||||
+++ b/include/vki/vki-arm64-linux.h
|
||||
@@ -193,6 +193,12 @@ struct vki_sigcontext {
|
||||
__vki_u8 __reserved[4096] __attribute__((__aligned__(16)));
|
||||
};
|
||||
|
||||
+//----------------------------------------------------------------------
|
||||
+// From linux-5.0.0/arch/arm64/include/uapi/asm/siginfo.h
|
||||
+//----------------------------------------------------------------------
|
||||
+
|
||||
+#define __VKI_ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
|
||||
+
|
||||
//----------------------------------------------------------------------
|
||||
// From linux-3.10.5/uapi/include/asm-generic/mman-common.h
|
||||
//----------------------------------------------------------------------
|
||||
diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h
|
||||
index 6024f2165..6903c77db 100644
|
||||
--- a/include/vki/vki-linux.h
|
||||
+++ b/include/vki/vki-linux.h
|
||||
@@ -426,6 +426,14 @@ typedef union vki_sigval {
|
||||
#define __VKI_ARCH_SI_BAND_T long
|
||||
#endif
|
||||
|
||||
+#ifndef __VKI_ARCH_SI_CLOCK_T
|
||||
+#define __VKI_ARCH_SI_CLOCK_T vki_clock_t
|
||||
+#endif
|
||||
+
|
||||
+#ifndef __VKI_ARCH_SI_ATTRIBUTES
|
||||
+#define __VKI_ARCH_SI_ATTRIBUTES
|
||||
+#endif
|
||||
+
|
||||
// [[Nb: this type changed between 2.4 and 2.6, but not in a way that
|
||||
// affects Valgrind.]]
|
||||
typedef struct vki_siginfo {
|
||||
@@ -463,8 +471,8 @@ typedef struct vki_siginfo {
|
||||
vki_pid_t _pid; /* which child */
|
||||
__VKI_ARCH_SI_UID_T _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
- vki_clock_t _utime;
|
||||
- vki_clock_t _stime;
|
||||
+ __VKI_ARCH_SI_CLOCK_T _utime;
|
||||
+ __VKI_ARCH_SI_CLOCK_T _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
|
||||
@@ -481,7 +489,7 @@ typedef struct vki_siginfo {
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
} _sifields;
|
||||
-} vki_siginfo_t;
|
||||
+} __VKI_ARCH_SI_ATTRIBUTES vki_siginfo_t;
|
||||
#endif
|
||||
|
||||
#define __VKI_SI_FAULT 0
|
||||
diff --git a/include/vki/vki-ppc64-linux.h b/include/vki/vki-ppc64-linux.h
|
||||
index a5e64dd39..04f72048a 100644
|
||||
--- a/include/vki/vki-ppc64-linux.h
|
||||
+++ b/include/vki/vki-ppc64-linux.h
|
||||
@@ -335,6 +335,14 @@ struct vki_sigcontext {
|
||||
long vmx_reserve[VKI_ELF_NVRREG+VKI_ELF_NVRREG+1];
|
||||
};
|
||||
|
||||
+//----------------------------------------------------------------------
|
||||
+// From linux-5.0.0/arch/powerpc/include/uapi/asm/siginfo.h
|
||||
+//----------------------------------------------------------------------
|
||||
+
|
||||
+#ifdef __powerpc64__
|
||||
+# define __VKI_ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
|
||||
+#endif
|
||||
+
|
||||
//----------------------------------------------------------------------
|
||||
// From linux-2.6.13/include/asm-ppc64/mman.h
|
||||
//----------------------------------------------------------------------
|
@ -3,7 +3,7 @@
|
||||
Summary: Tool for finding memory management bugs in programs
|
||||
Name: %{?scl_prefix}valgrind
|
||||
Version: 3.15.0
|
||||
Release: 11%{?dist}
|
||||
Release: 12%{?dist}
|
||||
Epoch: 1
|
||||
License: GPLv2+
|
||||
URL: http://www.valgrind.org/
|
||||
@ -133,6 +133,9 @@ Patch18: valgrind-3.15.0-arm-membarrier.patch
|
||||
# KDE#404406 s390x: z14 miscellaneous instructions not implemented
|
||||
Patch19: valgrind-3.15.0-z14-misc.patch
|
||||
|
||||
# KDE#405201 Incorrect size of struct vki_siginfo on 64-bit Linux architectures
|
||||
Patch20: valgrind-3.15.0-ptrace-siginfo.patch
|
||||
|
||||
BuildRequires: glibc-devel
|
||||
|
||||
%if %{build_openmpi}
|
||||
@ -288,6 +291,8 @@ Valgrind User Manual for details.
|
||||
%patch19 -p1
|
||||
%endif
|
||||
|
||||
%patch20 -p1
|
||||
|
||||
%build
|
||||
|
||||
# Some patches (might) touch Makefile.am or configure.ac files.
|
||||
@ -507,6 +512,9 @@ fi
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Mon Sep 23 2019 Mark Wielaard <mjw@fedoraproject.org> - 3.15.0-12
|
||||
- Add valgrind-3.15.0-ptrace-siginfo.patch
|
||||
|
||||
* Mon Aug 5 2019 Mark Wielaard <mjw@fedoraproject.org> - 3.15.0-11
|
||||
- Add valgrind-3.15.0-preadv2-pwritev2.patch
|
||||
- Add valgrind-3.15.0-arm-membarrier.patch
|
||||
|
Loading…
Reference in New Issue
Block a user