]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
vgdb.c (fork_and_exec_valgrind): Fix another off-by-one error write
authorMark Wielaard <mark@klomp.org>
Tue, 12 Nov 2024 12:34:09 +0000 (13:34 +0100)
committerMark Wielaard <mark@klomp.org>
Tue, 12 Nov 2024 12:34:09 +0000 (13:34 +0100)
commit 646978d9adc5 ("vgdb: Handle EINTR and EAGAIN more
consistently") introduced another 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 when the child needs to do a chdir and that chdir fails. If
that happens the parent would have gotten the wrong error code.

coregrind/vgdb.c

index 90e3f15020a653a36259be469b92d34e836b37c4..409ceac5d65cbc13dcfe8e819d7712c8dd8faecf 100644 (file)
@@ -1289,7 +1289,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)) {
-               int nrw = write (pipefd[1], ((char *)&err) + 1,
+               int nrw = write (pipefd[1], ((char *)&err) + written,
                                 sizeof (int) - written);
                if (nrw == -1) {
                   if (errno == EINTR || errno == EAGAIN)