From 57804a8edbe7b05293f55f1a79585b6b88f8db5f Mon Sep 17 00:00:00 2001 From: Paul Floyd Date: Sat, 23 Aug 2025 21:31:13 +0200 Subject: [PATCH] FreeBSD regtest: get pdfork_pdkill to pass on arm64 arm64 was giving a few conditional jump errors (suppressed) and a pdfork was succeeding with uninit flags whilst it was failing on amd64. Made sure that it has bad flags (-1) but still uninit. --- memcheck/tests/freebsd/Makefile.am | 1 + memcheck/tests/freebsd/pdfork_pdkill.c | 3 +++ memcheck/tests/freebsd/pdfork_pdkill.stderr.exp | 14 +++++++++----- memcheck/tests/freebsd/pdfork_pdkill.vgtest | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/memcheck/tests/freebsd/Makefile.am b/memcheck/tests/freebsd/Makefile.am index 0f00d67a4a..bb5de145c0 100644 --- a/memcheck/tests/freebsd/Makefile.am +++ b/memcheck/tests/freebsd/Makefile.am @@ -91,6 +91,7 @@ EXTRA_DIST = \ openpty.stderr.exp \ pdfork_pdkill.vgtest \ pdfork_pdkill.stderr.exp \ + pdfork_pdkill.supp \ realpathat.vgtest \ realpathat.stderr.exp \ revoke.vgtest \ diff --git a/memcheck/tests/freebsd/pdfork_pdkill.c b/memcheck/tests/freebsd/pdfork_pdkill.c index 8d83642bac..8347a1153c 100644 --- a/memcheck/tests/freebsd/pdfork_pdkill.c +++ b/memcheck/tests/freebsd/pdfork_pdkill.c @@ -94,6 +94,9 @@ int main(int argc, char *argv[]) { fprintf(stderr, "parent after 1st bad pdfork\n"); int anotherfd; int badflag; + // without this the last pdfork succeeds on arm64 + badflag = -1 + anotherfd; + badflag -=anotherfd; pid_t* pbadpid = malloc(sizeof(pid_t)); free(pbadpid); pdgetpid(anotherfd, pbadpid); diff --git a/memcheck/tests/freebsd/pdfork_pdkill.stderr.exp b/memcheck/tests/freebsd/pdfork_pdkill.stderr.exp index 2105d362ba..f5c911ae45 100644 --- a/memcheck/tests/freebsd/pdfork_pdkill.stderr.exp +++ b/memcheck/tests/freebsd/pdfork_pdkill.stderr.exp @@ -12,21 +12,25 @@ Syscall param pdfork(fdp) points to unaddressable byte(s) parent after 1st bad pdfork Syscall param pdgetpid(fd) contains uninitialised byte(s) ... - by 0x........: main (pdfork_pdkill.c:99) + by 0x........: main (pdfork_pdkill.c:101) Syscall param pdgetpid(pidp)) points to unaddressable byte(s) ... - by 0x........: main (pdfork_pdkill.c:99) + by 0x........: main (pdfork_pdkill.c:101) Address 0x........ is 0 bytes inside a block of size 4 free'd at 0x........: free (vg_replace_malloc.c:...) - by 0x........: main (pdfork_pdkill.c:98) + by 0x........: main (pdfork_pdkill.c:100) Block was alloc'd at at 0x........: malloc (vg_replace_malloc.c:...) - by 0x........: main (pdfork_pdkill.c:97) + by 0x........: main (pdfork_pdkill.c:99) + +Conditional jump or move depends on uninitialised value(s) + ... + by 0x........: main (pdfork_pdkill.c:101) Syscall param pdfork(flags) contains uninitialised byte(s) ... - by 0x........: main (pdfork_pdkill.c:100) + by 0x........: main (pdfork_pdkill.c:102) FILE DESCRIPTORS: 3 open (3 inherited) at exit. Open file descriptor ... diff --git a/memcheck/tests/freebsd/pdfork_pdkill.vgtest b/memcheck/tests/freebsd/pdfork_pdkill.vgtest index 066c16716a..a109ef6e13 100644 --- a/memcheck/tests/freebsd/pdfork_pdkill.vgtest +++ b/memcheck/tests/freebsd/pdfork_pdkill.vgtest @@ -1,4 +1,4 @@ prog: pdfork_pdkill args: 10 2 -vgopts: -q --track-fds=all --child-silent-after-fork=yes +vgopts: -q --track-fds=all --child-silent-after-fork=yes --suppressions=pdfork_pdkill.supp stderr_filter: filter_pts -- 2.47.3