valgrind/0002-vgdb.c-fork_and_exec_valgrind-Fix-off-by-one-error-w.patch
Mark Wielaard fe2c89f5ec 3.24.0-2 - Add VALGRIND_3_24_BRANCH patches
Resolves: RHEL-67029
Resolve gating test results for valgrind-3.24.0 rhel9
2024-11-27 01:03:41 +01:00

38 lines
1.4 KiB
Diff

From 2cb0bee2d7722b57956f66a0795b5b9106f88afc Mon Sep 17 00:00:00 2001
From: Mark Wielaard <mark@klomp.org>
Date: Tue, 12 Nov 2024 13:23:03 +0100
Subject: [PATCH 02/11] vgdb.c (fork_and_exec_valgrind): Fix off-by-one error
write
commit 646978d9adc5 ("vgdb: Handle EINTR and EAGAIN more
consistently") introduced an off-by-one issue trying to write back the
error from child to parent.
Instead of +1 it should have been +written (which initially is zero).
This is in an "should never happen" path, so hopefully didn't really
cause issues. But if it did happen the parent would have gotten the
wrong error code.
(cherry picked from commit f4fe5faf3d0f45b3824bbb9070232682df52a582)
---
coregrind/vgdb.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/coregrind/vgdb.c b/coregrind/vgdb.c
index 786ead160d34..112f23fe6ba1 100644
--- a/coregrind/vgdb.c
+++ b/coregrind/vgdb.c
@@ -1368,7 +1368,7 @@ int fork_and_exec_valgrind (int argc, char **argv, const char *working_dir,
// We try to write the result to the parent, but always exit.
size_t written = 0;
while (written < sizeof (int)) {
- ssize_t nrw = write (pipefd[1], ((char *) &err) + 1,
+ ssize_t nrw = write (pipefd[1], ((char *) &err) + written,
sizeof (int) - written);
if (nrw == -1) {
if (errno == EINTR || errno == EAGAIN)
--
2.47.0