You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
1
|
2
|
3
|
4
(3) |
5
(1) |
6
|
|
7
|
8
(10) |
9
(5) |
10
(1) |
11
(2) |
12
|
13
|
|
14
|
15
(3) |
16
|
17
|
18
(6) |
19
|
20
|
|
21
|
22
(3) |
23
|
24
|
25
(2) |
26
|
27
|
|
28
|
29
|
30
|
|
|
|
|
|
From: Mark W. <ma...@so...> - 2020-06-08 21:01:16
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=8334ab50bbb7ed76b08bd709eba14e9ca1c3a3cc commit 8334ab50bbb7ed76b08bd709eba14e9ca1c3a3cc Author: Mark Wielaard <ma...@kl...> Date: Mon Jun 8 22:58:44 2020 +0200 Add irker post-receive-hook. Diff: --- project.config | 2 ++ 1 file changed, 2 insertions(+) diff --git a/project.config b/project.config index c399faf0c1..2983a2e719 100644 --- a/project.config +++ b/project.config @@ -41,3 +41,5 @@ # private branches). no-emails = refs/heads/users/.* + # The script that calls the irker (IRC notification of new commits). + post-receive-hook = /git/valgrind.git/hooks-bin/post-receive |
|
From: Mark W. <ma...@so...> - 2020-06-08 19:00:31
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=6f6ff49ffa10da4e8027220d70791a72437846fd commit 6f6ff49ffa10da4e8027220d70791a72437846fd Author: Alexandra Hájková <aha...@re...> Date: Thu Apr 9 17:28:18 2020 +0200 Add support for execveat syscall Refactor the code to be reusable between execve and execveat syscalls. https://bugs.kde.org/show_bug.cgi?id=345077 Diff: --- .gitignore | 2 + NEWS | 1 + coregrind/m_syswrap/priv_syswrap-generic.h | 5 ++ coregrind/m_syswrap/priv_syswrap-linux.h | 3 + coregrind/m_syswrap/syswrap-amd64-linux.c | 1 + coregrind/m_syswrap/syswrap-generic.c | 115 +++++++++++++++++---------- coregrind/m_syswrap/syswrap-linux.c | 81 +++++++++++++++++++ include/vki/vki-linux.h | 3 + memcheck/tests/linux/Makefile.am | 7 +- memcheck/tests/linux/check_execveat.c | 18 +++++ memcheck/tests/linux/sys-execveat.c | 64 +++++++++++++++ memcheck/tests/linux/sys-execveat.stderr.exp | 19 +++++ memcheck/tests/linux/sys-execveat.stdout.exp | 1 + memcheck/tests/linux/sys-execveat.vgtest | 3 + 14 files changed, 279 insertions(+), 44 deletions(-) diff --git a/.gitignore b/.gitignore index 085a30b4ad..b2cd3a48e1 100644 --- a/.gitignore +++ b/.gitignore @@ -1052,6 +1052,8 @@ /memcheck/tests/linux/timerfd-syscall /memcheck/tests/linux/proc-auxv /memcheck/tests/linux/sys-openat +/memcheck/tests/linux/sys-execveat +/memcheck/tests/linux/check_execveat # /memcheck/tests/mips32/ /memcheck/tests/mips32/*.stderr.diff diff --git a/NEWS b/NEWS index 2eebd8874f..9d89f5ec52 100644 --- a/NEWS +++ b/NEWS @@ -39,6 +39,7 @@ To see details of a given bug, visit https://bugs.kde.org/show_bug.cgi?id=XXXXXX where XXXXXX is the bug number as listed below. +345077 linux syscall execveat support (linux 3.19) n-i-bz helgrind: If hg_cli__realloc fails, return NULL. Release 3.16.0 (27 May 2020) diff --git a/coregrind/m_syswrap/priv_syswrap-generic.h b/coregrind/m_syswrap/priv_syswrap-generic.h index 73f9224f76..4717abac65 100644 --- a/coregrind/m_syswrap/priv_syswrap-generic.h +++ b/coregrind/m_syswrap/priv_syswrap-generic.h @@ -123,6 +123,11 @@ void handle_sys_pwritev(ThreadId tid, SyscallStatus* status, Int fd, Addr vector, Int count, const char *str); +extern +void handle_pre_sys_execve(ThreadId tid, SyscallStatus *status, Addr pathname, + Addr arg_2, Addr arg_3, Bool is_execveat, + Bool check_pathptr); + DECL_TEMPLATE(generic, sys_ni_syscall); // * P -- unimplemented DECL_TEMPLATE(generic, sys_exit); DECL_TEMPLATE(generic, sys_fork); diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h index 349a97e4d1..cdc73c1e6d 100644 --- a/coregrind/m_syswrap/priv_syswrap-linux.h +++ b/coregrind/m_syswrap/priv_syswrap-linux.h @@ -299,6 +299,9 @@ DECL_TEMPLATE(linux, sys_membarrier); // Linux-specific (new in Linux 3.18) DECL_TEMPLATE(linux, sys_bpf); +// Linux-specific (new in Linux 3.19) +DECL_TEMPLATE(linux, sys_execveat); + // Linux-specific (new in Linux 4.11) DECL_TEMPLATE(linux, sys_statx); diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 0aef84af99..28d90135a4 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -856,6 +856,7 @@ static SyscallTableEntry syscall_table[] = { // LIN__(__NR_kexec_file_load, sys_ni_syscall), // 320 LINXY(__NR_bpf, sys_bpf), // 321 + LINX_(__NR_execveat, sys_execveat), // 322 LINXY(__NR_preadv2, sys_preadv2), // 327 LINX_(__NR_pwritev2, sys_pwritev2), // 328 diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c index 280c48f1b4..864bda76c5 100644 --- a/coregrind/m_syswrap/syswrap-generic.c +++ b/coregrind/m_syswrap/syswrap-generic.c @@ -65,7 +65,6 @@ #include "config.h" - void ML_(guess_and_register_stack) (Addr sp, ThreadState* tst) { Bool debug = False; @@ -2847,9 +2846,10 @@ void VG_(reap_threads)(ThreadId self) vg_assert(i_am_the_only_thread()); } -// XXX: prototype here seemingly doesn't match the prototype for i386-linux, -// but it seems to work nonetheless... -PRE(sys_execve) +/* This handles the common part of the PRE macro for execve and execveat. */ +void handle_pre_sys_execve(ThreadId tid, SyscallStatus *status, Addr pathname, + Addr arg_2, Addr arg_3, Bool is_execveat, + Bool check_pathptr) { HChar* path = NULL; /* path to executable */ HChar** envp = NULL; @@ -2860,27 +2860,39 @@ PRE(sys_execve) Int i, j, tot_args; SysRes res; Bool setuid_allowed, trace_this_child; + const char *str; + char str2[30], str3[30]; - PRINT("sys_execve ( %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x, %#" - FMT_REGWORD "x )", ARG1, (HChar*)(Addr)ARG1, ARG2, ARG3); - PRE_REG_READ3(vki_off_t, "execve", - char *, filename, char **, argv, char **, envp); - PRE_MEM_RASCIIZ( "execve(filename)", ARG1 ); - if (ARG2 != 0) { - /* At least the terminating NULL must be addressable. */ - if (!ML_(safe_to_deref)((HChar **) (Addr)ARG2, sizeof(HChar *))) { + if (is_execveat) + str = "execveat"; + else + str = "execve"; + + VG_(strcpy)(str2, str); + VG_(strcpy)(str3, str); + + if (arg_2 != 0) { + /* At least the terminating NULL must be addressable. */ + if (!ML_(safe_to_deref)((HChar **) (Addr)arg_2, sizeof(HChar *))) { SET_STATUS_Failure(VKI_EFAULT); return; } - ML_(pre_argv_envp)( ARG2, tid, "execve(argv)", "execve(argv[i])" ); + VG_(strcat)(str2, "(argv)"); + VG_(strcat)(str3, "(argv[i])"); + ML_(pre_argv_envp)( arg_2, tid, str2, str3 ); } - if (ARG3 != 0) { + // Reset helper strings to syscall name. + str2[VG_(strlen)(str)] = '\0'; + str3[VG_(strlen)(str)] = '\0'; + if (arg_3 != 0) { /* At least the terminating NULL must be addressable. */ - if (!ML_(safe_to_deref)((HChar **) (Addr)ARG3, sizeof(HChar *))) { + if (!ML_(safe_to_deref)((HChar **) (Addr)arg_3, sizeof(HChar *))) { SET_STATUS_Failure(VKI_EFAULT); return; } - ML_(pre_argv_envp)( ARG3, tid, "execve(envp)", "execve(envp[i])" ); + VG_(strcat)(str2, "(envp)"); + VG_(strcat)(str3, "(envp[i])"); + ML_(pre_argv_envp)( arg_3, tid, str2, str3 ); } vg_assert(VG_(is_valid_tid)(tid)); @@ -2893,35 +2905,36 @@ PRE(sys_execve) an effort to check that the execve will work before actually doing it. */ - /* Check that the name at least begins in client-accessible storage. */ - if (ARG1 == 0 /* obviously bogus */ - || !VG_(am_is_valid_for_client)( ARG1, 1, VKI_PROT_READ )) { - SET_STATUS_Failure( VKI_EFAULT ); - return; + /* Check that the name at least begins in client-accessible storage. + If we didn't create it ourselves in execveat. */ + if (check_pathptr + && !VG_(am_is_valid_for_client)( pathname, 1, VKI_PROT_READ )) { + SET_STATUS_Failure( VKI_EFAULT ); + return; } // debug-only printing if (0) { - VG_(printf)("ARG1 = %p(%s)\n", (void*)(Addr)ARG1, (HChar*)(Addr)ARG1); - if (ARG2) { - VG_(printf)("ARG2 = "); + VG_(printf)("pathname = %p(%s)\n", (void*)(Addr)pathname, (HChar*)(Addr)pathname); + if (arg_2) { + VG_(printf)("arg_2 = "); Int q; - HChar** vec = (HChar**)(Addr)ARG2; + HChar** vec = (HChar**)(Addr)arg_2; for (q = 0; vec[q]; q++) VG_(printf)("%p(%s) ", vec[q], vec[q]); VG_(printf)("\n"); } else { - VG_(printf)("ARG2 = null\n"); + VG_(printf)("arg_2 = null\n"); } } // Decide whether or not we want to follow along { // Make 'child_argv' be a pointer to the child's arg vector // (skipping the exe name) - const HChar** child_argv = (const HChar**)(Addr)ARG2; + const HChar** child_argv = (const HChar**)(Addr)arg_2; if (child_argv && child_argv[0] == NULL) child_argv = NULL; - trace_this_child = VG_(should_we_trace_this_child)( (HChar*)(Addr)ARG1, + trace_this_child = VG_(should_we_trace_this_child)( (HChar*)(Addr)pathname, child_argv ); } @@ -2929,7 +2942,7 @@ PRE(sys_execve) // ok, etc. We allow setuid executables to run only in the case when // we are not simulating them, that is, they to be run natively. setuid_allowed = trace_this_child ? False : True; - res = VG_(pre_exec_check)((const HChar *)(Addr)ARG1, NULL, setuid_allowed); + res = VG_(pre_exec_check)((const HChar *)(Addr)pathname, NULL, setuid_allowed); if (sr_isError(res)) { SET_STATUS_Failure( sr_Err(res) ); return; @@ -2946,7 +2959,7 @@ PRE(sys_execve) } /* After this point, we can't recover if the execve fails. */ - VG_(debugLog)(1, "syswrap", "Exec of %s\n", (HChar*)(Addr)ARG1); + VG_(debugLog)(1, "syswrap", "Exec of %s\n", (HChar*)(Addr)pathname); // Terminate gdbserver if it is active. @@ -2982,7 +2995,7 @@ PRE(sys_execve) } } else { - path = (HChar*)(Addr)ARG1; + path = (HChar*)(Addr)pathname; } // Set up the child's environment. @@ -2996,29 +3009,29 @@ PRE(sys_execve) // // Then, if tracing the child, set VALGRIND_LIB for it. // - if (ARG3 == 0) { + if (arg_3 == 0) { envp = NULL; } else { - envp = VG_(env_clone)( (HChar**)(Addr)ARG3 ); + envp = VG_(env_clone)( (HChar**)(Addr)arg_3 ); if (envp == NULL) goto hosed; VG_(env_remove_valgrind_env_stuff)( envp, True /*ro_strings*/, NULL ); } if (trace_this_child) { - // Set VALGRIND_LIB in ARG3 (the environment) + // Set VALGRIND_LIB in arg_3 (the environment) VG_(env_setenv)( &envp, VALGRIND_LIB, VG_(libdir)); } // Set up the child's args. If not tracing it, they are - // simply ARG2. Otherwise, they are + // simply arg_2. Otherwise, they are // - // [launcher_basename] ++ VG_(args_for_valgrind) ++ [ARG1] ++ ARG2[1..] + // [launcher_basename] ++ VG_(args_for_valgrind) ++ [pathname] ++ arg_2[1..] // // except that the first VG_(args_for_valgrind_noexecpass) args // are omitted. // if (!trace_this_child) { - argv = (HChar**)(Addr)ARG2; + argv = (HChar**)(Addr)arg_2; } else { vg_assert( VG_(args_for_valgrind) ); vg_assert( VG_(args_for_valgrind_noexecpass) >= 0 ); @@ -3033,7 +3046,7 @@ PRE(sys_execve) // name of client exe tot_args++; // args for client exe, skipping [0] - arg2copy = (HChar**)(Addr)ARG2; + arg2copy = (HChar**)(Addr)arg_2; if (arg2copy && arg2copy[0]) { for (i = 1; arg2copy[i]; i++) tot_args++; @@ -3049,7 +3062,7 @@ PRE(sys_execve) continue; argv[j++] = * (HChar**) VG_(indexXA)( VG_(args_for_valgrind), i ); } - argv[j++] = (HChar*)(Addr)ARG1; + argv[j++] = (HChar*)(Addr)pathname; if (arg2copy && arg2copy[0]) for (i = 1; arg2copy[i]; i++) argv[j++] = arg2copy[i]; @@ -3113,9 +3126,9 @@ PRE(sys_execve) VG_(printf)("env: %s\n", *cpp); } + // always execute this because it's executing valgrind, not the "target" exe SET_STATUS_from_SysRes( - VG_(do_syscall3)(__NR_execve, (UWord)path, (UWord)argv, (UWord)envp) - ); + VG_(do_syscall3)(__NR_execve, (UWord)path, (UWord)argv, (UWord)envp)); /* If we got here, then the execve failed. We've already made way too much of a mess to continue, so we have to abort. */ @@ -3123,12 +3136,30 @@ PRE(sys_execve) vg_assert(FAILURE); VG_(message)(Vg_UserMsg, "execve(%#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x, %#" FMT_REGWORD "x) failed, errno %lu\n", - ARG1, (HChar*)(Addr)ARG1, ARG2, ARG3, ERR); + pathname, (HChar*)(Addr)pathname, arg_2, arg_3, ERR); VG_(message)(Vg_UserMsg, "EXEC FAILED: I can't recover from " "execve() failing, so I'm dying.\n"); VG_(message)(Vg_UserMsg, "Add more stringent tests in PRE(sys_execve), " "or work out how to recover.\n"); VG_(exit)(101); + +} + +// XXX: prototype here seemingly doesn't match the prototype for i386-linux, +// but it seems to work nonetheless... +PRE(sys_execve) +{ + PRINT("sys_execve ( %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x, %#" + FMT_REGWORD "x )", ARG1, (HChar*)(Addr)ARG1, ARG2, ARG3); + PRE_REG_READ3(vki_off_t, "execve", + char *, filename, char **, argv, char **, envp); + PRE_MEM_RASCIIZ( "execve(filename)", ARG1 ); + + char *pathname = (char *)ARG1; + Addr arg_2 = (Addr)ARG2; + Addr arg_3 = (Addr)ARG3; + + handle_pre_sys_execve(tid, status, (Addr)pathname, arg_2, arg_3, 0, True); } PRE(sys_access) diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index b32bd214ad..5b5b7eee63 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -13138,6 +13138,87 @@ POST(sys_io_uring_register) { } +PRE(sys_execveat) +{ + PRINT("sys_execveat ( %lu, %#lx(%s), %#lx, %#lx, %lu", ARG1, ARG2, (char*)ARG2, ARG3, ARG4, ARG5); + PRE_REG_READ5(vki_off_t, "execveat", + int, fd, char *, filename, char **, argv, char **, envp, int, flags); + PRE_MEM_RASCIIZ( "execveat(filename)", ARG2); + +#if !defined(__NR_execveat) + SET_STATUS_Failure(VKI_ENOSYS); + return; +#endif + + char *path = (char*) ARG2; + Addr arg_2 = ARG3; + Addr arg_3 = ARG4; + const HChar *buf; + HChar *abs_path = NULL; + Bool check_at_symlink = False; + Bool check_pathptr = True; + + if (ML_(safe_to_deref) (path, 1)) { + /* If pathname is absolute, we'll ignore dirfd + * and just pass the pathname, try to determine + * the absolute path otherwise. */ + if (path[0] != '/') { + /* Check dirfd is a valid fd. */ + if (!ML_(fd_allowed)(ARG1, "execveat", tid, False)) { + SET_STATUS_Failure( VKI_EBADF ); + return; + } + /* If pathname is empty and AT_EMPTY_PATH is + set then dirfd describes the whole path. */ + if (path[0] == '\0') { + if (ARG5 & VKI_AT_EMPTY_PATH) { + if (VG_(resolve_filename)(ARG1, &buf)) { + VG_(strcpy)(path, buf); + check_pathptr = False; + } + } + } + else if (ARG1 == VKI_AT_FDCWD) { + check_at_symlink = True; + } else + if (ARG5 & VKI_AT_SYMLINK_NOFOLLOW) + check_at_symlink = True; + else if (VG_(resolve_filename)(ARG1, &buf)) { + abs_path = VG_(malloc)("execveat", + (VG_(strlen)(buf) + 1 + + VG_(strlen)(path) + 1)); + VG_(sprintf)(abs_path, "%s/%s", buf, path); + path = abs_path; + check_pathptr = False; + } + else + path = NULL; + if (check_at_symlink) { + struct vg_stat statbuf; + SysRes statres; + + statres = VG_(stat)(path, &statbuf); + if (sr_isError(statres) || VKI_S_ISLNK(statbuf.mode)) { + SET_STATUS_Failure( VKI_ELOOP ); + return; + } + } + } + } else { + SET_STATUS_Failure(VKI_EFAULT); + return; + } + + handle_pre_sys_execve(tid, status, (Addr) path, arg_2, arg_3, 1, + check_pathptr); + + /* The exec failed, we keep running... cleanup. */ + VG_(free)(abs_path); + + +} + + #undef PRE #undef POST diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h index ffda18f183..75b5831650 100644 --- a/include/vki/vki-linux.h +++ b/include/vki/vki-linux.h @@ -1296,6 +1296,8 @@ struct vki_seminfo { #define VKI_EWOULDBLOCK VKI_EAGAIN +#define VKI_ELOOP 40 + //---------------------------------------------------------------------- // From linux-2.6.8.1/include/linux/wait.h //---------------------------------------------------------------------- @@ -1502,6 +1504,7 @@ struct vki_flock64 { }; #define VKI_AT_EMPTY_PATH 0x1000 /* Allow empty relative pathname */ +#define VKI_AT_SYMLINK_NOFOLLOW 0x100 /* Do not follow symbolic links. */ //---------------------------------------------------------------------- // From linux-2.6.8.1/include/linux/sysctl.h diff --git a/memcheck/tests/linux/Makefile.am b/memcheck/tests/linux/Makefile.am index 14d4a07162..3111f631b4 100644 --- a/memcheck/tests/linux/Makefile.am +++ b/memcheck/tests/linux/Makefile.am @@ -28,7 +28,8 @@ EXTRA_DIST = \ proc-auxv.vgtest proc-auxv.stderr.exp getregset.vgtest \ getregset.stderr.exp getregset.stdout.exp \ sys-preadv_pwritev.vgtest sys-preadv_pwritev.stderr.exp \ - sys-preadv2_pwritev2.vgtest sys-preadv2_pwritev2.stderr.exp + sys-preadv2_pwritev2.vgtest sys-preadv2_pwritev2.stderr.exp \ + sys-execveat.vgtest sys-execveat.stderr.exp sys-execveat.stdout.exp check_PROGRAMS = \ brk \ @@ -47,7 +48,9 @@ check_PROGRAMS = \ syslog-syscall \ sys-statx \ timerfd-syscall \ - proc-auxv + proc-auxv \ + sys-execveat \ + check_execveat if HAVE_AT_FDCWD check_PROGRAMS += sys-openat diff --git a/memcheck/tests/linux/check_execveat.c b/memcheck/tests/linux/check_execveat.c new file mode 100644 index 0000000000..ad6107fb10 --- /dev/null +++ b/memcheck/tests/linux/check_execveat.c @@ -0,0 +1,18 @@ +#include <sys/syscall.h> +#include <errno.h> +#include <unistd.h> +#include <stddef.h> + +int main(int argc, char **argv) +{ + int has_execveat = 0; +#if defined(__NR_execveat) + errno = 0; + syscall(__NR_execveat, 0, NULL, 0, 0, 0); + has_execveat = (errno != ENOSYS); +#else + has_execveat = 0; +#endif + + return has_execveat ? 0 : 1; +} diff --git a/memcheck/tests/linux/sys-execveat.c b/memcheck/tests/linux/sys-execveat.c new file mode 100644 index 0000000000..921b8888ff --- /dev/null +++ b/memcheck/tests/linux/sys-execveat.c @@ -0,0 +1,64 @@ +#include <sys/syscall.h> +#include <errno.h> +#include <dirent.h> +#include <unistd.h> +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> +#include <sys/stat.h> +#include <fcntl.h> + +static int sys_execveat (int dirfd, const char *pathname, + char *const argv[], char *const envp[], + int flags) +{ +#if defined(__NR_execveat) + return syscall(__NR_execveat, dirfd, pathname, argv, envp, flags); +#else + errno = ENOSYS; + return -1; +#endif +} + + +int main() +{ + char *argv[] = { "foobar", "execveat exists", NULL }; + char *envp[] = { NULL }; + DIR *dirp; + int fd; + + dirp = opendir("/bin"); + if (dirp == NULL) { + perror("execveat"); + exit(EXIT_FAILURE); + } + fd = dirfd(dirp); + + /* Check valgrind will produce expected warnings for the + various wrong arguments. */ + do { + char *mem = malloc(16); + void *t = (void *) &mem[0]; + void *z = (void *) -1; + int flag = *((int *) &mem[8]); + + sys_execveat(-1, "bin/xecho", argv, envp, 0); + sys_execveat(-1, "xecho", argv, envp, 0); + sys_execveat(fd, "xecho", argv, envp, flag); + sys_execveat(fd, "", argv, envp, 0); + sys_execveat(fd, NULL, argv, envp, 0); + sys_execveat(fd, "xecho", t, envp, 0); + sys_execveat(fd, "xecho", z, envp, 0); + } while (0); + + /* Check execveat called with the correct arguments works. */ + if (sys_execveat(fd, "echo", argv, envp, 0) == -1) { + perror("execveat"); + exit(EXIT_FAILURE); + } + + closedir(dirp); + exit(EXIT_SUCCESS); +} + diff --git a/memcheck/tests/linux/sys-execveat.stderr.exp b/memcheck/tests/linux/sys-execveat.stderr.exp new file mode 100644 index 0000000000..a58b0fb6ae --- /dev/null +++ b/memcheck/tests/linux/sys-execveat.stderr.exp @@ -0,0 +1,19 @@ +Syscall param execveat(flags) contains uninitialised byte(s) + ... + by 0x........: sys_execveat (sys-execveat.c:16) + by 0x........: main (sys-execveat.c:48) + +Syscall param execveat(filename) points to unaddressable byte(s) + ... + by 0x........: sys_execveat (sys-execveat.c:16) + by 0x........: main (sys-execveat.c:50) + Address 0x........ is not stack'd, malloc'd or (recently) free'd + +Syscall param execveat(argv) points to uninitialised byte(s) + ... + by 0x........: sys_execveat (sys-execveat.c:16) + by 0x........: main (sys-execveat.c:51) + Address 0x........ is 0 bytes inside a block of size 16 alloc'd + at 0x........: malloc (vg_replace_malloc.c:...) + by 0x........: main (sys-execveat.c:41) + diff --git a/memcheck/tests/linux/sys-execveat.stdout.exp b/memcheck/tests/linux/sys-execveat.stdout.exp new file mode 100644 index 0000000000..c7e51ee1a9 --- /dev/null +++ b/memcheck/tests/linux/sys-execveat.stdout.exp @@ -0,0 +1 @@ +execveat exists diff --git a/memcheck/tests/linux/sys-execveat.vgtest b/memcheck/tests/linux/sys-execveat.vgtest new file mode 100644 index 0000000000..87ac016056 --- /dev/null +++ b/memcheck/tests/linux/sys-execveat.vgtest @@ -0,0 +1,3 @@ +prereq: ./check_execveat +prog: sys-execveat +vgopts: -q |
|
From: Mark W. <ma...@so...> - 2020-06-08 18:00:36
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=bfd43aef3e6fed732f6b09ac37aac31401c8f32e commit bfd43aef3e6fed732f6b09ac37aac31401c8f32e Author: Mark Wielaard <ma...@kl...> Date: Mon Jun 8 19:52:02 2020 +0200 Prepare NEWS for 3.17.0 Diff: --- NEWS | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/NEWS b/NEWS index 71a7a01e3c..2eebd8874f 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,45 @@ +Release 3.17.0 (?? ??? 202?) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +3.17.0 is a feature release with many improvements and the usual collection +of bug fixes. + +This release supports X86/Linux, AMD64/Linux, ARM32/Linux, ARM64/Linux, +PPC32/Linux, PPC64BE/Linux, PPC64LE/Linux, S390X/Linux, MIPS32/Linux, +MIPS64/Linux, ARM/Android, ARM64/Android, MIPS32/Android, X86/Android, +X86/Solaris, AMD64/Solaris and AMD64/MacOSX 10.12. There is also preliminary +support for X86/macOS 10.13, AMD64/macOS 10.13 and nanoMIPS/Linux. + +* ==================== CORE CHANGES =================== + +* ==================== TOOL CHANGES ==================== + +* DHAT: + +* Cachegrind: + +* Callgrind: + +* Massif: + +* Memcheck: + +* ==================== OTHER CHANGES ==================== + +* ==================== FIXED BUGS ==================== + +The following bugs have been fixed or resolved. Note that "n-i-bz" +stands for "not in bugzilla" -- that is, a bug that was reported to us +but never got a bugzilla entry. We encourage you to file bugs in +bugzilla (https://bugs.kde.org/enter_bug.cgi?product=valgrind) rather +than mailing the developers (or mailing lists) directly -- bugs that +are not entered into bugzilla tend to get forgotten about or ignored. + +To see details of a given bug, visit + https://bugs.kde.org/show_bug.cgi?id=XXXXXX +where XXXXXX is the bug number as listed below. + +n-i-bz helgrind: If hg_cli__realloc fails, return NULL. Release 3.16.0 (27 May 2020) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
From: Mark W. <ma...@so...> - 2020-06-08 18:00:29
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=5902175ae91675b5aead2f0fc39d9396d53cb6e7 commit 5902175ae91675b5aead2f0fc39d9396d53cb6e7 Author: Julian Seward <js...@ac...> Date: Mon Jun 8 07:32:19 2020 +0200 -> 3.16.0 final (cherry picked from commit 108b4a0880bc04f9db6133f79a8e4a98dcfc0cd0) Diff: --- NEWS | 5 +++-- configure.ac | 2 +- docs/xml/vg-entities.xml | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 6d6d1e4335..71a7a01e3c 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,5 @@ -Release 3.16.0 (22 May 2020) +Release 3.16.0 (27 May 2020) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3.16.0 is a feature release with many improvements and the usual collection of @@ -177,7 +177,8 @@ n-i-bz Fix non-glibc build of test suite with s390x_features n-i-bz MinGW, include/valgrind.h: Fix detection of 64-bit mode (3.16.0.RC1: 18 May 2020, git 6052ee66a0cf5234e8e2a2b49a8760226bc13b92) -(3.15.0.RC2: 19 May 2020, git 940ec1ca69a09f7fdae3e800b7359f85c13c4b37) +(3.16.0.RC2: 19 May 2020, git 940ec1ca69a09f7fdae3e800b7359f85c13c4b37) +(3.16.0: 27 May 2020, git bf5e647edb9e96cbd5c57cc944984402eeee296d) diff --git a/configure.ac b/configure.ac index ecd90e58fd..524230d57d 100755 --- a/configure.ac +++ b/configure.ac @@ -8,7 +8,7 @@ ##------------------------------------------------------------## # Process this file with autoconf to produce a configure script. -AC_INIT([Valgrind],[3.16.0.RC2],[val...@li...]) +AC_INIT([Valgrind],[3.16.0],[val...@li...]) AC_CONFIG_SRCDIR(coregrind/m_main.c) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE([foreign dist-bzip2 subdir-objects]) diff --git a/docs/xml/vg-entities.xml b/docs/xml/vg-entities.xml index d95a285c3f..aa14f3b47e 100644 --- a/docs/xml/vg-entities.xml +++ b/docs/xml/vg-entities.xml @@ -7,7 +7,7 @@ <!-- valgrind release + version stuff --> <!ENTITY rel-type "Release"> <!ENTITY rel-version "3.16.0"> -<!ENTITY rel-date "22 May 2020"> +<!ENTITY rel-date "27 May 2020"> <!-- where the docs are installed --> <!ENTITY vg-docs-path "$INSTALL/share/doc/valgrind/html/index.html"> |
|
From: Mark W. <ma...@so...> - 2020-06-08 18:00:19
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=3f5b9ecfe86035d5b83eb587772bddb32531c467 commit 3f5b9ecfe86035d5b83eb587772bddb32531c467 Author: Julian Seward <js...@ac...> Date: Tue May 19 14:33:31 2020 +0200 -> 3.16.0.RC2 (cherry picked from commit bf5e647edb9e96cbd5c57cc944984402eeee296d) Diff: --- NEWS | 1 + configure.ac | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index e34e36bd01..6d6d1e4335 100644 --- a/NEWS +++ b/NEWS @@ -177,6 +177,7 @@ n-i-bz Fix non-glibc build of test suite with s390x_features n-i-bz MinGW, include/valgrind.h: Fix detection of 64-bit mode (3.16.0.RC1: 18 May 2020, git 6052ee66a0cf5234e8e2a2b49a8760226bc13b92) +(3.15.0.RC2: 19 May 2020, git 940ec1ca69a09f7fdae3e800b7359f85c13c4b37) diff --git a/configure.ac b/configure.ac index 58041e8b60..ecd90e58fd 100755 --- a/configure.ac +++ b/configure.ac @@ -8,7 +8,7 @@ ##------------------------------------------------------------## # Process this file with autoconf to produce a configure script. -AC_INIT([Valgrind],[3.16.0.RC1],[val...@li...]) +AC_INIT([Valgrind],[3.16.0.RC2],[val...@li...]) AC_CONFIG_SRCDIR(coregrind/m_main.c) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE([foreign dist-bzip2 subdir-objects]) |
|
From: Mark W. <ma...@so...> - 2020-06-08 13:17:59
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=4facc497bdaf4651141b437c40e87d042ae02680 commit 4facc497bdaf4651141b437c40e87d042ae02680 Author: Mark Wielaard <ma...@kl...> Date: Mon Jun 8 15:14:04 2020 +0200 doc/Makefile.am: Turn valid-manual and valid-manpages into real targets Make valid-manual and valid-manpages real, separate make targets. This means they can be run in parallel and they will only be run once when doing make check, unless one of the manual and manpages files has been touched. Diff: --- docs/Makefile.am | 53 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/docs/Makefile.am b/docs/Makefile.am index db833cab53..e9d659d2ec 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -136,15 +136,58 @@ XSL_MAN_STYLES = \ /usr/share/xml/docbook/stylesheet/nwalsh/current/manpages/docbook.xsl \ /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl +# Input files for valid-manual and valid-manpages +MANUAL_XML_FILES = $(myxmldir)/index.xml \ + $(myxmldir)/vg-entities.xml \ + $(myxmldir)/quick-start-guide.xml \ + $(myxmldir)/manual.xml \ + $(myxmldir)/manual-intro.xml \ + $(myxmldir)/manual-core.xml \ + $(myxmldir)/manual-core-adv.xml \ + $(top_srcdir)/*/docs/*-manual.xml \ + $(myxmldir)/quick-start-guide.xml \ + $(myxmldir)/FAQ.xml \ + $(myxmldir)/tech-docs.xml \ + $(myxmldir)/design-impl.xml \ + $(myxmldir)/manual-writing-tools.xml \ + $(top_srcdir)/callgrind/docs/cl-format.xml \ + $(myxmldir)/dist-docs.xml \ + $(top_srcdir)/AUTHORS \ + $(top_srcdir)/NEWS \ + $(top_srcdir)/NEWS.old \ + $(top_srcdir)/README \ + $(top_srcdir)/README_MISSING_SYSCALL_OR_IOCTL \ + $(top_srcdir)/README_DEVELOPERS \ + $(top_srcdir)/README_PACKAGERS \ + $(top_srcdir)/README.s390 \ + $(top_srcdir)/README.android \ + $(top_srcdir)/README.android_emulator \ + $(top_srcdir)/README.mips \ + $(top_srcdir)/README.solaris \ + $(myxmldir)/licenses.xml \ + $(top_srcdir)/COPYING \ + $(top_srcdir)/COPYING.DOCS + +MANPAGES_XML_FILES = $(myxmldir)/manpages-index.xml \ + $(myxmldir)/valgrind-manpage.xml \ + $(myxmldir)/manual-core.xml \ + $(top_srcdir)/*/docs/*-manual.xml + all-docs: FAQ.txt man-pages html-docs print-docs -valid: +valid-manual: $(MANUAL_XML_FILES) + if type $(XMLLINT) 2>/dev/null; then \ + $(XMLLINT) $(XMLLINT_FLAGS) $(myxmldir)/index.xml && \ + touch $@; \ + fi + +valid-manpages: $(MANPAGES_XML_FILES) if type $(XMLLINT) 2>/dev/null; then \ - $(XMLLINT) $(XMLLINT_FLAGS) $(myxmldir)/index.xml; \ - $(XMLLINT) $(XMLLINT_FLAGS) $(myxmldir)/manpages-index.xml; \ + $(XMLLINT) $(XMLLINT_FLAGS) $(myxmldir)/manpages-index.xml && \ + touch $@; \ fi -check-local: valid +check-local: valid-manual valid-manpages # The text version of the FAQ. FAQ.txt: @@ -252,6 +295,8 @@ distclean-local: rm -f FAQ.txt rm -f $(top_builddir)/FAQ.txt $(top_builddir)/docs/*.1 +clean-local: + rm -f valid-manual valid-manpages # ----------------------------------------------------------------------- |
|
From: Mark W. <ma...@so...> - 2020-06-08 11:38:10
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=9f4cd0c47c420e53f7fd667ae4e268f2b30ceffb commit 9f4cd0c47c420e53f7fd667ae4e268f2b30ceffb Author: Mark Wielaard <ma...@kl...> Date: Mon Jun 8 13:36:11 2020 +0200 drd/tests/tsan_unittest.cpp: Fix array CHECK Use == equality, not = assignment, for CHECK. Diff: --- drd/tests/tsan_unittest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drd/tests/tsan_unittest.cpp b/drd/tests/tsan_unittest.cpp index f68cac4eed..ab42740515 100644 --- a/drd/tests/tsan_unittest.cpp +++ b/drd/tests/tsan_unittest.cpp @@ -6619,7 +6619,7 @@ void Getter() { for (int i = 1; i <= N; i++) { int res = q.Get(); if (res > 0) { - CHECK(array[res] = res * res); + CHECK(array[res] == res * res); non_zero_received++; } usleep(1000); |
|
From: Mark W. <ma...@so...> - 2020-06-08 11:35:25
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=4285dff54d09a48e78c138fba100bca2a481b471 commit 4285dff54d09a48e78c138fba100bca2a481b471 Author: Mark Wielaard <ma...@kl...> Date: Mon Jun 8 13:27:28 2020 +0200 guest_ppc_toIR: Call vpanic not just vex_printf when the impossible happens is_Zero_Vector, is_Denorm_Vector, is_NaN_Vector and negate_Vector only handle an Ity_I32 element size. And that is also what they are currently being called with. In case they would ever be called with a different element_size they would simply vex_printf and continue (producing bogus/impossible results). To make this a bit more future proof (and to silence a static analyzer) vpanic instead. Diff: --- VEX/priv/guest_ppc_toIR.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c index 6e3fac74f8..582c59ec0b 100644 --- a/VEX/priv/guest_ppc_toIR.c +++ b/VEX/priv/guest_ppc_toIR.c @@ -3974,7 +3974,7 @@ static IRExpr * is_Zero_Vector( IRType element_size, IRExpr *src ) assign( frac_maskV128, unop( Iop_Dup32x4, mkU32( I32_FRACTION_MASK ) ) ); } else - vex_printf("ERROR, is_Zero_Vector: Unknown input size\n"); + vpanic("ERROR, is_Zero_Vector: Unknown input size"); /* CmpEQ32x4 returns all 1's in elements where comparison is true */ assign( exp_zeroV128, @@ -4011,7 +4011,7 @@ static IRExpr * is_Denorm_Vector( IRType element_size, IRExpr *src ) assign( frac_maskV128, unop( Iop_Dup32x4, mkU32( I32_FRACTION_MASK ) ) ); } else - vex_printf("ERROR, is_Denorm_Vector: Unknown input size\n"); + vpanic("ERROR, is_Denorm_Vector: Unknown input size"); /* CmpEQ32x4 returns all 1's in elements where comparison is true */ assign( exp_zeroV128, @@ -4048,7 +4048,7 @@ static IRExpr * is_NaN_Vector( IRType element_size, IRExpr *src ) opCmpEQ = Iop_CmpEQ32x4; } else - vex_printf("ERROR, is_NaN_Vector: Unknown input size\n"); + vpanic("ERROR, is_NaN_Vector: Unknown input size"); /* check exponent is all ones, i.e. (exp AND exp_mask) = exp_mask */ assign( max_expV128, @@ -4307,7 +4307,7 @@ static IRExpr* negate_Vector ( IRType element_size, IRExpr* value ) assign( sign_maskV128, unop( Iop_Dup32x4, mkU32( I32_SIGN_MASK ) ) ); } else - vex_printf("ERROR, negate_Vector: Unknown input size\n"); + vpanic("ERROR, negate_Vector: Unknown input size"); /* Determine if vector elementes are not a NaN, negate sign bit for non NaN elements */ |
|
From: Mark W. <ma...@so...> - 2020-06-08 11:27:14
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=79818bf9a59c44576f99cfe32991eeed896bd51d commit 79818bf9a59c44576f99cfe32991eeed896bd51d Author: Mark Wielaard <ma...@kl...> Date: Mon Jun 8 13:24:47 2020 +0200 helgrind: If hg_cli__realloc fails, return NULL. helgrind would not handle a failing realloc correctly and assume cli_malloc would always succeed. If cli_malloc fails in hg_cli__realloc do like dh and massif and fail the realloc call by returning NULL. Diff: --- helgrind/hg_main.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/helgrind/hg_main.c b/helgrind/hg_main.c index 8b8dd05498..26b0c5a123 100644 --- a/helgrind/hg_main.c +++ b/helgrind/hg_main.c @@ -4331,6 +4331,11 @@ static void* hg_cli__realloc ( ThreadId tid, void* payloadV, SizeT new_size ) /* else */ { /* new size is bigger */ Addr p_new = (Addr)VG_(cli_malloc)(VG_(clo_alignment), new_size); + if (!p_new) { + // Nb: if realloc fails, NULL is returned but the old block is not + // touched. What an awful function. + return NULL; + } /* First half kept and copied, second half new */ // FIXME: shouldn't we use a copier which implements the |
|
From: Julian S. <se...@so...> - 2020-06-08 05:33:30
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=108b4a0880bc04f9db6133f79a8e4a98dcfc0cd0 commit 108b4a0880bc04f9db6133f79a8e4a98dcfc0cd0 Author: Julian Seward <js...@ac...> Date: Mon Jun 8 07:32:19 2020 +0200 -> 3.16.0 final Diff: --- NEWS | 5 +++-- configure.ac | 2 +- docs/xml/vg-entities.xml | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 6d6d1e4335..71a7a01e3c 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,5 @@ -Release 3.16.0 (22 May 2020) +Release 3.16.0 (27 May 2020) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3.16.0 is a feature release with many improvements and the usual collection of @@ -177,7 +177,8 @@ n-i-bz Fix non-glibc build of test suite with s390x_features n-i-bz MinGW, include/valgrind.h: Fix detection of 64-bit mode (3.16.0.RC1: 18 May 2020, git 6052ee66a0cf5234e8e2a2b49a8760226bc13b92) -(3.15.0.RC2: 19 May 2020, git 940ec1ca69a09f7fdae3e800b7359f85c13c4b37) +(3.16.0.RC2: 19 May 2020, git 940ec1ca69a09f7fdae3e800b7359f85c13c4b37) +(3.16.0: 27 May 2020, git bf5e647edb9e96cbd5c57cc944984402eeee296d) diff --git a/configure.ac b/configure.ac index ecd90e58fd..524230d57d 100755 --- a/configure.ac +++ b/configure.ac @@ -8,7 +8,7 @@ ##------------------------------------------------------------## # Process this file with autoconf to produce a configure script. -AC_INIT([Valgrind],[3.16.0.RC2],[val...@li...]) +AC_INIT([Valgrind],[3.16.0],[val...@li...]) AC_CONFIG_SRCDIR(coregrind/m_main.c) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE([foreign dist-bzip2 subdir-objects]) diff --git a/docs/xml/vg-entities.xml b/docs/xml/vg-entities.xml index d95a285c3f..aa14f3b47e 100644 --- a/docs/xml/vg-entities.xml +++ b/docs/xml/vg-entities.xml @@ -7,7 +7,7 @@ <!-- valgrind release + version stuff --> <!ENTITY rel-type "Release"> <!ENTITY rel-version "3.16.0"> -<!ENTITY rel-date "22 May 2020"> +<!ENTITY rel-date "27 May 2020"> <!-- where the docs are installed --> <!ENTITY vg-docs-path "$INSTALL/share/doc/valgrind/html/index.html"> |