From: Mark Wielaard Date: Tue, 12 Nov 2024 12:34:09 +0000 (+0100) Subject: vgdb.c (fork_and_exec_valgrind): Fix another off-by-one error write X-Git-Tag: VALGRIND_3_25_0~240 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=747ca4eb5fed5dd58a14391a997bb9e658e3b1c8;p=thirdparty%2Fvalgrind.git vgdb.c (fork_and_exec_valgrind): Fix another off-by-one error write 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. --- diff --git a/coregrind/vgdb.c b/coregrind/vgdb.c index 90e3f1502..409ceac5d 100644 --- a/coregrind/vgdb.c +++ b/coregrind/vgdb.c @@ -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)