From 22553ad6c53dfe12d86ee61f15e61d9451e9dcd1 Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Fri, 6 Jul 2018 14:54:28 -0400 Subject: [PATCH 01/64] Fix AARCH64 params - Fix aarch64 long parameters (via $r8) support. - Make system_call_params test compare more exactly. --- ltrace-0.7.91-aarch64-params.patch | 37 ++++++++++++++++++++++++++++++ ltrace.spec | 10 +++++++- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 ltrace-0.7.91-aarch64-params.patch diff --git a/ltrace-0.7.91-aarch64-params.patch b/ltrace-0.7.91-aarch64-params.patch new file mode 100644 index 0000000..29767c5 --- /dev/null +++ b/ltrace-0.7.91-aarch64-params.patch @@ -0,0 +1,37 @@ +diff -rup a/sysdeps/linux-gnu/aarch64/fetch.c b/sysdeps/linux-gnu/aarch64/fetch.c +--- a/sysdeps/linux-gnu/aarch64/fetch.c 2018-07-05 16:06:10.066626252 -0400 ++++ b/sysdeps/linux-gnu/aarch64/fetch.c 2018-07-05 16:17:17.659748481 -0400 +@@ -308,12 +308,9 @@ arch_fetch_arg_init(enum tof type, struc + struct fetch_script how = pass_arg(context, proc, ret_info); + if (how.c == CVT_ERR) + goto fail; +- if (how.c == CVT_NOP && how.f == FETCH_STACK) { ++ if (how.c == CVT_BYREF && how.f == FETCH_GPR) { + /* XXX double cast. */ + context->x8 = (arch_addr_t) (uintptr_t) context->gregs.regs[8]; +- /* See the comment above about the assert. */ +- assert(! "Unexpected: first argument passed on stack."); +- abort(); + } + + return context; +diff -rup a/testsuite/ltrace.main/system_call_params.exp b/testsuite/ltrace.main/system_call_params.exp +--- a/testsuite/ltrace.main/system_call_params.exp 2018-07-05 16:06:10.516624926 -0400 ++++ b/testsuite/ltrace.main/system_call_params.exp 2018-07-05 16:58:01.549830643 -0400 +@@ -61,13 +61,13 @@ set conf [ltraceNamedSource "$dir/syscal + # doesn't list readdir, that would be taken from somelib.conf with a + # wrong prototype. + +-ltraceMatch1 [ltraceRun -L -S -F $conf -- $bin] {^open@SYS\("/some/path"} == 0 ++ltraceMatch1 [ltraceRun -L -S -F $conf -- $bin] {^open@SYS\("/some/path", 0\)} == 0 + + # On the other hand, if -F somedir/ is given, we want to accept + # syscalls.conf found there. + + ltraceMatch [ltraceRun -L -S -F $dir -- $bin] { +- {{^open@SYS\("/some/path"} == 1} ++ {{^open@SYS\("/some/path", 0\)} == 1} + {{^write@SYS\(1, "something", 10\)} == 1} + {{^mount@SYS\("source", "target", "filesystemtype"} == 1} + } +Only in b/testsuite/ltrace.main: system_call_params.exp~ diff --git a/ltrace.spec b/ltrace.spec index 4314676..0eab999 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 26%{?dist} +Release: 27%{?dist} URL: http://ltrace.alioth.debian.org/ License: GPLv2+ Group: Development/Debuggers @@ -103,6 +103,9 @@ Patch26: ltrace-0.7.91-tautology.patch # ARM code has unreachable code after switch statement, move initialization Patch27: ltrace-rh1423913.patch +# AARCH64 large parameters and syscall testsuite fixes. +Patch28: ltrace-0.7.91-aarch64-params.patch + %description Ltrace is a debugging program which runs a specified command until the command exits. While the command is executing, ltrace intercepts and @@ -142,6 +145,7 @@ execution of processes. %patch25 -p1 %patch26 -p1 %patch27 -p1 +%patch28 -p1 %build autoreconf -i @@ -167,6 +171,10 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Thu Jul 05 2018 DJ Delorie - 0.7.91-27 +- Fix aarch64 long parameters (via $r8) support. +- Make system_call_params test compare more exactly. + * Fri Feb 09 2018 Igor Gnatenko - 0.7.91-26 - Escape macros in %%changelog From d85198bfb5852ef6989145d15bb75a0cac174ca7 Mon Sep 17 00:00:00 2001 From: Jason Tibbitts Date: Tue, 10 Jul 2018 01:50:56 -0500 Subject: [PATCH 02/64] Remove needless use of %defattr --- ltrace.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index 0eab999..dee6fe7 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -163,7 +163,6 @@ timeout 180 make check ||: echo ====================TESTING END===================== %files -%defattr(-,root,root) %doc NEWS COPYING CREDITS INSTALL README TODO %{_bindir}/ltrace %{_mandir}/man1/ltrace.1* From b29373d63612b8e95be436684ca79bbff2a0e7f5 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 13 Jul 2018 09:25:07 +0000 Subject: [PATCH 03/64] - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- ltrace.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index dee6fe7..4ea8190 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 27%{?dist} +Release: 28%{?dist} URL: http://ltrace.alioth.debian.org/ License: GPLv2+ Group: Development/Debuggers @@ -170,6 +170,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Fri Jul 13 2018 Fedora Release Engineering - 0.7.91-28 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + * Thu Jul 05 2018 DJ Delorie - 0.7.91-27 - Fix aarch64 long parameters (via $r8) support. - Make system_call_params test compare more exactly. From 6ec3ae320790f1313629ce4f19614ccbb9648c75 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Wed, 16 Jan 2019 15:06:46 -0700 Subject: [PATCH 04/64] - Avoid passing NULL as argument to %s in printf call --- ltrace-0.7.91-null.patch | 14 ++++++++++++++ ltrace.spec | 9 ++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 ltrace-0.7.91-null.patch diff --git a/ltrace-0.7.91-null.patch b/ltrace-0.7.91-null.patch new file mode 100644 index 0000000..4ff7e6a --- /dev/null +++ b/ltrace-0.7.91-null.patch @@ -0,0 +1,14 @@ +diff --git a/output.c b/output.c +index 7cab383..18f9cf0 100644 +--- a/output.c ++++ b/output.c +@@ -598,6 +598,9 @@ frame_callback (Dwfl_Frame *state, void *arg) + NULL, NULL, NULL); + symname = dwfl_module_addrinfo(mod, pc, &off, &sym, + NULL, NULL, NULL); ++ } else { ++ modname = "unknown"; ++ symname = "unknown"; + } + + /* This mimics the output produced by libunwind below. */ diff --git a/ltrace.spec b/ltrace.spec index 4ea8190..0528806 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 28%{?dist} +Release: 29%{?dist} URL: http://ltrace.alioth.debian.org/ License: GPLv2+ Group: Development/Debuggers @@ -106,6 +106,9 @@ Patch27: ltrace-rh1423913.patch # AARCH64 large parameters and syscall testsuite fixes. Patch28: ltrace-0.7.91-aarch64-params.patch +# gcc-9 fix. Avoid passing NULL as argument to %s +Patch29: ltrace-0.7.91-null.patch + %description Ltrace is a debugging program which runs a specified command until the command exits. While the command is executing, ltrace intercepts and @@ -146,6 +149,7 @@ execution of processes. %patch26 -p1 %patch27 -p1 %patch28 -p1 +%patch29 -p1 %build autoreconf -i @@ -170,6 +174,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Wed Jan 16 2019 Jeff Law - 0.7.91-29 +- Avoid passing NULL as argument to %s in printf call + * Fri Jul 13 2018 Fedora Release Engineering - 0.7.91-28 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild From 2aadca5477fde4d84740aa37f675cbc38a874aa4 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Mon, 28 Jan 2019 20:17:53 +0100 Subject: [PATCH 05/64] Remove obsolete Group tag References: https://fedoraproject.org/wiki/Changes/Remove_Group_Tag --- ltrace.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index 0528806..99eaba8 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -4,7 +4,6 @@ Version: 0.7.91 Release: 29%{?dist} URL: http://ltrace.alioth.debian.org/ License: GPLv2+ -Group: Development/Debuggers BuildRequires: elfutils-devel dejagnu BuildRequires: libselinux-devel From 32b5bcdc8d06f32ad8b1a2a7706838eda588aa74 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 1 Feb 2019 09:06:12 +0000 Subject: [PATCH 06/64] - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- ltrace.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index 99eaba8..f2ff26e 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 29%{?dist} +Release: 30%{?dist} URL: http://ltrace.alioth.debian.org/ License: GPLv2+ @@ -173,6 +173,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Fri Feb 01 2019 Fedora Release Engineering - 0.7.91-30 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + * Wed Jan 16 2019 Jeff Law - 0.7.91-29 - Avoid passing NULL as argument to %s in printf call From 5695a6a3e519e6f15ae9c975b97edb9912357c68 Mon Sep 17 00:00:00 2001 From: Eugene Syromiatnikov Date: Tue, 5 Mar 2019 17:50:28 -0500 Subject: [PATCH 07/64] Fix "Too many return value classes" assert Patch to ensure e_machine is properly initialized in some cases where we attach to a running multi-threaded process. --- ltrace-0.7.91-emachine-init.patch | 49 +++++++++++++++++++++++++++++++ ltrace.spec | 9 +++++- 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 ltrace-0.7.91-emachine-init.patch diff --git a/ltrace-0.7.91-emachine-init.patch b/ltrace-0.7.91-emachine-init.patch new file mode 100644 index 0000000..7bcc765 --- /dev/null +++ b/ltrace-0.7.91-emachine-init.patch @@ -0,0 +1,49 @@ +Patch to ensure e_machine is properly initialized in some cases where +we attach to a running multi-threaded process. + +diff -rup a/proc.c b/proc.c +--- a/proc.c 2019-02-28 17:32:50.020734842 -0500 ++++ b/proc.c 2019-02-28 21:04:31.179942091 -0500 +@@ -38,6 +38,7 @@ + #include "breakpoint.h" + #include "debug.h" + #include "fetch.h" ++#include "ltrace-elf.h" + #include "options.h" + #include "proc.h" + #include "value_dict.h" +@@ -218,6 +219,21 @@ process_init(struct process *proc, const + return -1; + } + ++ { ++ struct ltelf lte; ++ ++ if (ltelf_init(<e, filename) < 0) { ++ process_bare_destroy(proc, 0); ++ goto fail; ++ } ++ ++ proc->e_machine = lte.ehdr.e_machine; ++ proc->e_class = lte.ehdr.e_ident[EI_CLASS]; ++ get_arch_dep(proc); ++ ++ ltelf_destroy(<e); ++ } ++ + if (os_process_init(proc) < 0) { + process_bare_destroy(proc, 0); + goto fail; +diff -rup a/sysdeps/linux-gnu/x86/fetch.c b/sysdeps/linux-gnu/x86/fetch.c +--- a/sysdeps/linux-gnu/x86/fetch.c 2019-02-28 17:32:50.168810377 -0500 ++++ b/sysdeps/linux-gnu/x86/fetch.c 2019-02-28 20:57:32.162800555 -0500 +@@ -275,6 +275,9 @@ allocate_integer(struct fetch_context *c + #undef HANDLE32 + } + ++ assert(!"Unknown machine architecture"); ++ abort(); ++ + case POOL_RETVAL: + switch (context->ireg) { + #ifdef __x86_64__ diff --git a/ltrace.spec b/ltrace.spec index f2ff26e..287e190 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 30%{?dist} +Release: 31%{?dist} URL: http://ltrace.alioth.debian.org/ License: GPLv2+ @@ -108,6 +108,9 @@ Patch28: ltrace-0.7.91-aarch64-params.patch # gcc-9 fix. Avoid passing NULL as argument to %s Patch29: ltrace-0.7.91-null.patch +# Fix "Too many return value classes" assert +Patch30: ltrace-0.7.91-emachine-init.patch + %description Ltrace is a debugging program which runs a specified command until the command exits. While the command is executing, ltrace intercepts and @@ -149,6 +152,7 @@ execution of processes. %patch27 -p1 %patch28 -p1 %patch29 -p1 +%patch30 -p1 %build autoreconf -i @@ -173,6 +177,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Tue Mar 5 2019 Eugene Syromiatnikov - 0.7.91-31 +- Fix "Too many return value classes" assert + * Fri Feb 01 2019 Fedora Release Engineering - 0.7.91-30 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild From 926a6be35eafc74b2db191227bc3c0779d533ef7 Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Tue, 12 Mar 2019 20:34:42 -0400 Subject: [PATCH 08/64] Revert previous patch. Redundant. Not esyr's fault. --- ltrace-0.7.91-emachine-init.patch | 49 ------------------------------- ltrace.spec | 9 +++--- 2 files changed, 4 insertions(+), 54 deletions(-) delete mode 100644 ltrace-0.7.91-emachine-init.patch diff --git a/ltrace-0.7.91-emachine-init.patch b/ltrace-0.7.91-emachine-init.patch deleted file mode 100644 index 7bcc765..0000000 --- a/ltrace-0.7.91-emachine-init.patch +++ /dev/null @@ -1,49 +0,0 @@ -Patch to ensure e_machine is properly initialized in some cases where -we attach to a running multi-threaded process. - -diff -rup a/proc.c b/proc.c ---- a/proc.c 2019-02-28 17:32:50.020734842 -0500 -+++ b/proc.c 2019-02-28 21:04:31.179942091 -0500 -@@ -38,6 +38,7 @@ - #include "breakpoint.h" - #include "debug.h" - #include "fetch.h" -+#include "ltrace-elf.h" - #include "options.h" - #include "proc.h" - #include "value_dict.h" -@@ -218,6 +219,21 @@ process_init(struct process *proc, const - return -1; - } - -+ { -+ struct ltelf lte; -+ -+ if (ltelf_init(<e, filename) < 0) { -+ process_bare_destroy(proc, 0); -+ goto fail; -+ } -+ -+ proc->e_machine = lte.ehdr.e_machine; -+ proc->e_class = lte.ehdr.e_ident[EI_CLASS]; -+ get_arch_dep(proc); -+ -+ ltelf_destroy(<e); -+ } -+ - if (os_process_init(proc) < 0) { - process_bare_destroy(proc, 0); - goto fail; -diff -rup a/sysdeps/linux-gnu/x86/fetch.c b/sysdeps/linux-gnu/x86/fetch.c ---- a/sysdeps/linux-gnu/x86/fetch.c 2019-02-28 17:32:50.168810377 -0500 -+++ b/sysdeps/linux-gnu/x86/fetch.c 2019-02-28 20:57:32.162800555 -0500 -@@ -275,6 +275,9 @@ allocate_integer(struct fetch_context *c - #undef HANDLE32 - } - -+ assert(!"Unknown machine architecture"); -+ abort(); -+ - case POOL_RETVAL: - switch (context->ireg) { - #ifdef __x86_64__ diff --git a/ltrace.spec b/ltrace.spec index 287e190..6a8a34f 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 31%{?dist} +Release: 32%{?dist} URL: http://ltrace.alioth.debian.org/ License: GPLv2+ @@ -108,9 +108,6 @@ Patch28: ltrace-0.7.91-aarch64-params.patch # gcc-9 fix. Avoid passing NULL as argument to %s Patch29: ltrace-0.7.91-null.patch -# Fix "Too many return value classes" assert -Patch30: ltrace-0.7.91-emachine-init.patch - %description Ltrace is a debugging program which runs a specified command until the command exits. While the command is executing, ltrace intercepts and @@ -152,7 +149,6 @@ execution of processes. %patch27 -p1 %patch28 -p1 %patch29 -p1 -%patch30 -p1 %build autoreconf -i @@ -177,6 +173,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Tue Mar 12 2019 DJ Delorie - 0.7.91-32 +- Revert previous patch, redundant + * Tue Mar 5 2019 Eugene Syromiatnikov - 0.7.91-31 - Fix "Too many return value classes" assert From 33db0068ba692cd6fe66f7b46923b4e20734291b Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Thu, 4 Apr 2019 17:23:36 -0400 Subject: [PATCH 09/64] Add Intel CET support Adds two features: 1. Parsing CET-enabled PLTs. 2. Using a second "insecure" PLT as a fallback. --- ltrace-0.7.91-cet.patch | 121 ++++++++++++++++++++++++++++++++++++++++ ltrace.spec | 9 ++- 2 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 ltrace-0.7.91-cet.patch diff --git a/ltrace-0.7.91-cet.patch b/ltrace-0.7.91-cet.patch new file mode 100644 index 0000000..a320682 --- /dev/null +++ b/ltrace-0.7.91-cet.patch @@ -0,0 +1,121 @@ +diff -rup a/ltrace-elf.c b/ltrace-elf.c +--- a/ltrace-elf.c 2019-02-28 17:32:49.873659818 -0500 ++++ b/ltrace-elf.c 2019-02-28 17:36:32.426779439 -0500 +@@ -639,7 +639,21 @@ ltelf_read_elf(struct ltelf *lte, const + } + } else if (shdr.sh_type == SHT_PROGBITS + || shdr.sh_type == SHT_NOBITS) { +- if (strcmp(name, ".plt") == 0) { ++ if (strcmp(name, ".plt") == 0 ++ && lte->second_plt_seen == 0) { ++ lte->plt_addr = shdr.sh_addr; ++ lte->plt_size = shdr.sh_size; ++ lte->plt_data = elf_loaddata(scn, &shdr); ++ if (lte->plt_data == NULL) ++ fprintf(stderr, ++ "Can't load .plt data\n"); ++ lte->plt_flags = shdr.sh_flags; ++ } ++ /* An Intel CET binary has two PLTs; the ++ initial PLTGOT points to the second ++ one. */ ++ else if (strcmp(name, ".plt.sec") == 0) { ++ lte->second_plt_seen = 1; + lte->plt_addr = shdr.sh_addr; + lte->plt_size = shdr.sh_size; + lte->plt_data = elf_loaddata(scn, &shdr); +diff -rup a/ltrace-elf.h b/ltrace-elf.h +--- a/ltrace-elf.h 2019-02-28 17:32:49.874660328 -0500 ++++ b/ltrace-elf.h 2019-02-28 17:36:32.428779868 -0500 +@@ -45,6 +45,7 @@ struct ltelf { + Elf_Data *dynsym; + size_t dynsym_count; + const char *dynstr; ++ int second_plt_seen; + GElf_Addr plt_addr; + GElf_Word plt_flags; + size_t plt_size; +diff -rup a/sysdeps/linux-gnu/x86/plt.c b/sysdeps/linux-gnu/x86/plt.c +--- a/sysdeps/linux-gnu/x86/plt.c 2019-02-28 17:32:49.991720041 -0500 ++++ b/sysdeps/linux-gnu/x86/plt.c 2019-02-28 17:36:32.429780083 -0500 +@@ -28,18 +28,18 @@ + #include "trace.h" + + static GElf_Addr +-x86_plt_offset(uint32_t i) ++x86_plt_offset(struct ltelf *lte, uint32_t i) + { + /* Skip the first PLT entry, which contains a stub to call the + * resolver. */ +- return (i + 1) * 16; ++ return (i + (lte->second_plt_seen ? 0 : 1)) * 16; + } + + GElf_Addr + arch_plt_sym_val(struct ltelf *lte, size_t ndx, GElf_Rela *rela) + { + uint32_t i = *VECT_ELEMENT(<e->arch.plt_map, uint32_t, ndx); +- return x86_plt_offset(i) + lte->plt_addr; ++ return x86_plt_offset(lte, i) + lte->plt_addr; + } + + void * +@@ -116,6 +116,13 @@ arch_elf_init(struct ltelf *lte, struct + * 400426: 68 00 00 00 00 pushq $0x0 + * 40042b: e9 e0 ff ff ff jmpq 400410 <_init+0x18> + * ++ * For CET binaries it is the following: ++ * ++ * 13d0: f3 0f 1e fa endbr64 ++ * 13d4: 68 27 00 00 00 pushq $0x27 <-- index ++ * 13d9: f2 e9 71 fd ff ff bnd jmpq 1150 <.plt> ++ * 13df: 90 nop ++ * + * On i386, the argument to push is an offset of relocation to + * use. The first PLT slot has an offset of 0x0, the second + * 0x8, etc. On x86_64, it's directly the index that we are +@@ -128,11 +135,33 @@ arch_elf_init(struct ltelf *lte, struct + unsigned int i, sz = vect_size(<e->plt_relocs); + for (i = 0; i < sz; ++i) { + +- GElf_Addr offset = x86_plt_offset(i); ++ GElf_Addr offset = x86_plt_offset(lte, i); ++ uint32_t reloc_arg; + + uint8_t byte; +- if (elf_read_next_u8(lte->plt_data, &offset, &byte) < 0 +- || byte != 0xff ++ if (elf_read_next_u8(lte->plt_data, &offset, &byte) < 0) ++ continue; ++ ++ ++ if (byte == 0xf3 ++ && elf_read_next_u8(lte->plt_data, &offset, &byte) >= 0 ++ && byte == 0x0f ++ && elf_read_next_u8(lte->plt_data, &offset, &byte) >= 0 ++ && byte == 0x1e ++ && elf_read_next_u8(lte->plt_data, &offset, &byte) >= 0 ++ && byte == 0xfa ++ && elf_read_next_u8(lte->plt_data, &offset, &byte) >= 0 ++ && byte == 0x68 ++ && elf_read_next_u32(lte->plt_data, ++ &offset, &reloc_arg) >= 0) ++ { ++ /* CET */ ++ fprintf(stderr, "%d: reloc_arg is %lx\n", i, (long)reloc_arg); ++ *VECT_ELEMENT(<e->arch.plt_map, unsigned int, reloc_arg) = i; ++ continue; ++ } ++ ++ if (byte != 0xff + || elf_read_next_u8(lte->plt_data, &offset, &byte) < 0 + || (byte != 0xa3 && byte != 0x25)) + continue; +@@ -140,7 +169,6 @@ arch_elf_init(struct ltelf *lte, struct + /* Skip immediate argument in the instruction. */ + offset += 4; + +- uint32_t reloc_arg; + if (elf_read_next_u8(lte->plt_data, &offset, &byte) < 0 + || byte != 0x68 + || elf_read_next_u32(lte->plt_data, diff --git a/ltrace.spec b/ltrace.spec index 6a8a34f..1c231f8 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 32%{?dist} +Release: 33%{?dist} URL: http://ltrace.alioth.debian.org/ License: GPLv2+ @@ -108,6 +108,9 @@ Patch28: ltrace-0.7.91-aarch64-params.patch # gcc-9 fix. Avoid passing NULL as argument to %s Patch29: ltrace-0.7.91-null.patch +# Adds support for CET PLTs via second-plt lookups. +Patch30: ltrace-0.7.91-cet.patch + %description Ltrace is a debugging program which runs a specified command until the command exits. While the command is executing, ltrace intercepts and @@ -149,6 +152,7 @@ execution of processes. %patch27 -p1 %patch28 -p1 %patch29 -p1 +%patch30 -p1 %build autoreconf -i @@ -173,6 +177,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Thu Apr 4 2019 DJ Delorie - 0.7.91-33 +- Add Intel CET support. + * Tue Mar 12 2019 DJ Delorie - 0.7.91-32 - Revert previous patch, redundant From 3306a47dce13f5e5b5aa2f1d426f40fc29dc4d80 Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Wed, 17 Jul 2019 16:06:34 -0400 Subject: [PATCH 10/64] Testsuite fixed, aarch64 updates - Add fixes in handling of bogus paths that come from XDG_CONFIG_DIRS. - Testsuite fixes for pre-installed config files. - Extra AARCH64 includes for gcc 9. - Testsuite: AARCH64 ifuncs not supported yet yet. --- ltrace-0.7.91-XDG_CONFIG_DIRS.patch | 151 ++++++++++++++++++ ltrace-0.7.91-aarch64-headers.patch | 24 +++ ...-0.7.91-testsuite-system_call_params.patch | 68 ++++++++ ltrace-rh1225568.patch | 12 ++ ltrace.spec | 24 ++- 5 files changed, 278 insertions(+), 1 deletion(-) create mode 100644 ltrace-0.7.91-XDG_CONFIG_DIRS.patch create mode 100644 ltrace-0.7.91-aarch64-headers.patch create mode 100644 ltrace-0.7.91-testsuite-system_call_params.patch create mode 100644 ltrace-rh1225568.patch diff --git a/ltrace-0.7.91-XDG_CONFIG_DIRS.patch b/ltrace-0.7.91-XDG_CONFIG_DIRS.patch new file mode 100644 index 0000000..27638e6 --- /dev/null +++ b/ltrace-0.7.91-XDG_CONFIG_DIRS.patch @@ -0,0 +1,151 @@ +diff -rupN a/options.c b/options.c +--- a/options.c 2019-06-28 17:15:31.515626363 -0400 ++++ b/options.c 2019-06-28 17:18:59.490632337 -0400 +@@ -440,7 +440,8 @@ parse_int(const char *optarg, char opt, + } + + int +-parse_colon_separated_list(const char *paths, struct vect *vec) ++parse_colon_separated_list(const char *paths, struct vect *vec, ++ enum opt_F_origin origin) + { + /* PATHS contains a colon-separated list of directories and + * files to load. It's modeled after shell PATH variable, +@@ -467,6 +468,7 @@ parse_colon_separated_list(const char *p + struct opt_F_t arg = { + .pathname = tok, + .own_pathname = tok == clone, ++ .origin = origin, + }; + if (VECT_PUSHBACK(vec, &arg) < 0) + /* Presumably this is not a deal-breaker. */ +@@ -494,16 +496,18 @@ opt_F_get_kind(struct opt_F_t *entry) + if (entry->kind == OPT_F_UNKNOWN) { + struct stat st; + if (lstat(entry->pathname, &st) < 0) { +- fprintf(stderr, "Couldn't stat %s: %s\n", +- entry->pathname, strerror(errno)); ++ if (entry->origin == OPT_F_CMDLINE) ++ fprintf(stderr, "Couldn't stat %s: %s\n", ++ entry->pathname, strerror(errno)); + entry->kind = OPT_F_BROKEN; + } else if (S_ISDIR(st.st_mode)) { + entry->kind = OPT_F_DIR; + } else if (S_ISREG(st.st_mode) || S_ISLNK(st.st_mode)) { + entry->kind = OPT_F_FILE; + } else { +- fprintf(stderr, "%s is neither a regular file, " +- "nor a directory.\n", entry->pathname); ++ if (entry->origin == OPT_F_CMDLINE) ++ fprintf(stderr, "%s is neither a regular file, " ++ "nor a directory.\n", entry->pathname); + entry->kind = OPT_F_BROKEN; + } + } +@@ -607,7 +611,8 @@ process_options(int argc, char **argv) + options.follow = 1; + break; + case 'F': +- parse_colon_separated_list(optarg, &opt_F); ++ parse_colon_separated_list(optarg, &opt_F, ++ OPT_F_CMDLINE); + break; + case 'h': + usage(); +diff -rupN a/options.h b/options.h +--- a/options.h 2019-06-28 17:15:31.515626363 -0400 ++++ b/options.h 2019-06-28 17:18:55.984632238 -0400 +@@ -1,6 +1,6 @@ + /* + * This file is part of ltrace. +- * Copyright (C) 2012,2013 Petr Machata, Red Hat Inc. ++ * Copyright (C) 2012, 2013, 2015 Petr Machata, Red Hat Inc. + * Copyright (C) 2009,2010 Joe Damato + * Copyright (C) 1998,2002,2008 Juan Cespedes + * Copyright (C) 2006 Ian Wienand +@@ -77,10 +77,16 @@ enum opt_F_kind { + OPT_F_DIR, + }; + ++enum opt_F_origin { ++ OPT_F_CMDLINE = 0, ++ OPT_F_ENVIRON, ++}; ++ + struct opt_F_t { + char *pathname; + int own_pathname : 1; + enum opt_F_kind kind : 2; ++ enum opt_F_origin origin : 1; + }; + + /* If entry->kind is OPT_F_UNKNOWN, figure out whether it should be +@@ -98,7 +104,8 @@ void opt_F_destroy(struct opt_F_t *entry + * The list is split and added to VEC, which shall be a vector + * initialized like VECT_INIT(VEC, struct opt_F_t); Returns 0 on + * success or a negative value on failure. */ +-int parse_colon_separated_list(const char *paths, struct vect *vec); ++int parse_colon_separated_list(const char *paths, struct vect *vec, ++ enum opt_F_origin origin); + + /* Vector of struct opt_F_t. */ + extern struct vect opt_F; +diff -rupN a/sysdeps/linux-gnu/hooks.c b/sysdeps/linux-gnu/hooks.c +--- a/sysdeps/linux-gnu/hooks.c 2013-11-04 20:08:03.000000000 -0500 ++++ b/sysdeps/linux-gnu/hooks.c 2019-06-28 17:18:55.989632238 -0400 +@@ -1,6 +1,6 @@ + /* + * This file is part of ltrace. +- * Copyright (C) 2012, 2013 Petr Machata ++ * Copyright (C) 2012, 2013, 2015 Petr Machata + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as +@@ -153,7 +153,7 @@ again: + if (xdg_sys != NULL) { + struct vect v; + VECT_INIT(&v, struct opt_F_t); +- if (parse_colon_separated_list(xdg_sys, &v) < 0 ++ if (parse_colon_separated_list(xdg_sys, &v, OPT_F_ENVIRON) < 0 + || VECT_EACH(&v, struct opt_F_t, NULL, + add_dir_component_cb, &dirs) != NULL) + fprintf(stderr, +diff -rupN a/testsuite/ltrace.main/XDG_CONFIG_DIRS.exp b/testsuite/ltrace.main/XDG_CONFIG_DIRS.exp +--- a/testsuite/ltrace.main/XDG_CONFIG_DIRS.exp 1969-12-31 19:00:00.000000000 -0500 ++++ b/testsuite/ltrace.main/XDG_CONFIG_DIRS.exp 2019-06-28 17:18:55.989632238 -0400 +@@ -0,0 +1,35 @@ ++# This file is part of ltrace. ++# Copyright (C) 2015 Petr Machata, Red Hat Inc. ++# ++# This program is free software; you can redistribute it and/or ++# modify it under the terms of the GNU General Public License as ++# published by the Free Software Foundation; either version 2 of the ++# License, or (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, but ++# WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++# General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software ++# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ++# 02110-1301 USA ++ ++set bin [ltraceCompile {} [ltraceSource c { ++ int main() { return 0; } ++}]] ++ ++setenv XDG_CONFIG_DIRS "blah" ++ltraceRun -L -- $bin ++unsetenv XDG_CONFIG_DIRS ++ ++if {[catch "exec $LTRACE -L -F blah -- $bin" output]} { ++ ltraceMatch [ltraceSource ltrace "$output"] { ++ {blah == 1} ++ } ++} else { ++ fail "expected error message regarding `blah`" ++} ++ ++ltraceDone diff --git a/ltrace-0.7.91-aarch64-headers.patch b/ltrace-0.7.91-aarch64-headers.patch new file mode 100644 index 0000000..597fa0a --- /dev/null +++ b/ltrace-0.7.91-aarch64-headers.patch @@ -0,0 +1,24 @@ +Index: ltrace-0.7.91/sysdeps/linux-gnu/aarch64/regs.c +=================================================================== +--- ltrace-0.7.91.orig/sysdeps/linux-gnu/aarch64/regs.c ++++ ltrace-0.7.91/sysdeps/linux-gnu/aarch64/regs.c +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + + #include "backend.h" + #include "proc.h" +Index: ltrace-0.7.91/sysdeps/linux-gnu/aarch64/trace.c +=================================================================== +--- ltrace-0.7.91.orig/sysdeps/linux-gnu/aarch64/trace.c ++++ ltrace-0.7.91/sysdeps/linux-gnu/aarch64/trace.c +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + + #include "backend.h" + #include "proc.h" diff --git a/ltrace-0.7.91-testsuite-system_call_params.patch b/ltrace-0.7.91-testsuite-system_call_params.patch new file mode 100644 index 0000000..233b5c8 --- /dev/null +++ b/ltrace-0.7.91-testsuite-system_call_params.patch @@ -0,0 +1,68 @@ +diff -rup a/testsuite/Makefile.am b/testsuite/Makefile.am +--- a/testsuite/Makefile.am 2012-12-16 20:53:45.000000000 -0500 ++++ b/testsuite/Makefile.am 2019-06-28 16:59:19.935602953 -0400 +@@ -39,6 +39,7 @@ env.exp: Makefile + rm -f env.exp + echo set libelf_LD_LIBRARY_PATH '"$(libelf_LD_LIBRARY_PATH)"' >> $@ + echo set libunwind_LD_LIBRARY_PATH '"$(libunwind_LD_LIBRARY_PATH)"' >> $@ ++ echo set PREFIX '"$(prefix)"' >> $@ + + CLEANFILES = *.o *.so *.log *.sum *.ltrace site.bak setval.tmp site.exp env.exp + +diff -rup a/testsuite/Makefile.in b/testsuite/Makefile.in +--- a/testsuite/Makefile.in 2013-11-04 20:22:47.000000000 -0500 ++++ b/testsuite/Makefile.in 2019-06-28 16:59:12.075602806 -0400 +@@ -648,6 +648,7 @@ env.exp: Makefile + rm -f env.exp + echo set libelf_LD_LIBRARY_PATH '"$(libelf_LD_LIBRARY_PATH)"' >> $@ + echo set libunwind_LD_LIBRARY_PATH '"$(libunwind_LD_LIBRARY_PATH)"' >> $@ ++ echo set PREFIX '"$(prefix)"' >> $@ + + # Tell versions [3.59,3.63) of GNU make to not export all variables. + # Otherwise a system limit (for SysV at least) may be exceeded. +diff -rup a/testsuite/ltrace.main/system_call_params.exp b/testsuite/ltrace.main/system_call_params.exp +--- a/testsuite/ltrace.main/system_call_params.exp 2019-06-28 16:44:07.542584754 -0400 ++++ b/testsuite/ltrace.main/system_call_params.exp 2019-06-28 17:00:35.811604355 -0400 +@@ -1,5 +1,5 @@ + # This file is part of ltrace. +-# Copyright (C) 2013, 2014 Petr Machata, Red Hat Inc. ++# Copyright (C) 2013, 2014, 2015 Petr Machata, Red Hat Inc. + # + # This program is free software; you can redistribute it and/or + # modify it under the terms of the GNU General Public License as +@@ -60,8 +60,35 @@ set conf [ltraceNamedSource "$dir/syscal + # somelib.conf is passed, and syscalls.conf is not available, or + # doesn't list readdir, that would be taken from somelib.conf with a + # wrong prototype. ++# ++# This test relies on the fact that there is no global config file ++# that would provide legitimate system call prototypes. But that ++# doesn't have to be true, maybe ltrace is already installed on the ++# system with the right prefix. So first compile a wrapper that we ++# use to redirect fopen calls. ++ ++set libfopen_so [ltraceCompile libfopen.so -ldl \ ++ [ltraceSource c [string map [list "@PREFIX@" "$PREFIX"] { ++ #define _GNU_SOURCE ++ #include ++ #include ++ #include ++ ++ FILE * ++ fopen(const char *path, const char *mode) ++ { ++ #define PATH "@PREFIX@/share" ++ if (strncmp(path, PATH, sizeof(PATH) - 1) == 0) ++ path = "/dev/null"; + ++ return ((FILE *(*)(const char *, const char *)) ++ dlsym(RTLD_NEXT, "fopen")) (path, mode); ++ } ++}]]] ++ ++setenv LD_PRELOAD $libfopen_so + ltraceMatch1 [ltraceRun -L -S -F $conf -- $bin] {^open@SYS\("/some/path", 0\)} == 0 ++unsetenv LD_PRELOAD + + # On the other hand, if -F somedir/ is given, we want to accept + # syscalls.conf found there. diff --git a/ltrace-rh1225568.patch b/ltrace-rh1225568.patch new file mode 100644 index 0000000..612abc1 --- /dev/null +++ b/ltrace-rh1225568.patch @@ -0,0 +1,12 @@ +diff -Nrup a/testsuite/ltrace.minor/trace-irelative.exp b/testsuite/ltrace.minor/trace-irelative.exp +--- a/testsuite/ltrace.minor/trace-irelative.exp 2013-11-04 18:08:03.000000000 -0700 ++++ b/testsuite/ltrace.minor/trace-irelative.exp 2015-06-01 12:30:59.737371166 -0600 +@@ -54,6 +54,8 @@ set src [ltraceSource c { + }] + + foreach ext {{} .pie} { ++ # ltrace does not yet support AARCH64's ifuncs ++ setup_xfail aarch64*-*-* + set bin1 [ltraceCompile $ext $src] + do_tests $bin1 "" + } diff --git a/ltrace.spec b/ltrace.spec index 1c231f8..85b2069 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,13 +1,14 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 33%{?dist} +Release: 34%{?dist} URL: http://ltrace.alioth.debian.org/ License: GPLv2+ BuildRequires: elfutils-devel dejagnu BuildRequires: libselinux-devel BuildRequires: autoconf automake libtool +BuildRequires: gcc-c++ # Note: this URL needs to be updated for each release, as the file # number changes for each file. Full list of released files is at: @@ -111,6 +112,17 @@ Patch29: ltrace-0.7.91-null.patch # Adds support for CET PLTs via second-plt lookups. Patch30: ltrace-0.7.91-cet.patch +# Extra #includes for gcc 9 +Patch31: ltrace-0.7.91-aarch64-headers.patch +# Testsuite: AARCH64 ifuncs not supported yet yet. +Patch32: ltrace-rh1225568.patch + +# testsuite fixes for pre-installed config files +Patch33: ltrace-0.7.91-testsuite-system_call_params.patch + +# Ignore bogus files from the environment +Patch34: ltrace-0.7.91-XDG_CONFIG_DIRS.patch + %description Ltrace is a debugging program which runs a specified command until the command exits. While the command is executing, ltrace intercepts and @@ -153,6 +165,10 @@ execution of processes. %patch28 -p1 %patch29 -p1 %patch30 -p1 +%patch31 -p1 +%patch32 -p1 +%patch33 -p1 +%patch34 -p1 %build autoreconf -i @@ -177,6 +193,12 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Wed Jul 17 2019 DJ Delorie - 0.7.91-34 +- Add fixes in handling of bogus paths that come from XDG_CONFIG_DIRS. +- Testsuite fixes for pre-installed config files. +- Extra AARCH64 includes for gcc 9. +- Testsuite: AARCH64 ifuncs not supported yet yet. + * Thu Apr 4 2019 DJ Delorie - 0.7.91-33 - Add Intel CET support. From 29bc5d8e70b416622c2c0c273d7ecca0ac5f6461 Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Tue, 23 Jul 2019 14:35:04 -0400 Subject: [PATCH 11/64] Temporarily skip ppc64 tests Tests on ppc64le are hanging koji, despite the forced timeout. The rpmbuild finishes normally - even building rpms - but the hung testcase keeps koji from seeing it as "done". So skip tests on ppc64le for now, until we can fix the hang. --- ltrace.spec | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index 85b2069..325e0fd 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 34%{?dist} +Release: 35%{?dist} URL: http://ltrace.alioth.debian.org/ License: GPLv2+ @@ -182,7 +182,10 @@ make DESTDIR=$RPM_BUILD_ROOT bindir=%{_bindir} install # koji for some reason. Disable it, but have it handy. %check echo ====================TESTING========================= +# The ppc64 testsuite hangs rpmbuild hard in koji, disable until fixed. +%ifnarch ppc64le timeout 180 make check ||: +%endif echo ====================TESTING END===================== %files @@ -193,6 +196,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Tue Jul 23 2019 DJ Delorie - 0.7.91-35 +- Skip ppc64 testsuite until the hangs in koji can be fixed. + * Wed Jul 17 2019 DJ Delorie - 0.7.91-34 - Add fixes in handling of bogus paths that come from XDG_CONFIG_DIRS. - Testsuite fixes for pre-installed config files. From 26dcb3847a196cd42e7fe6867e98b936dc449b84 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 29 Jan 2020 11:23:18 +0000 Subject: [PATCH 12/64] - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- ltrace.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index 325e0fd..b5ea596 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 35%{?dist} +Release: 36%{?dist} URL: http://ltrace.alioth.debian.org/ License: GPLv2+ @@ -196,6 +196,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Wed Jan 29 2020 Fedora Release Engineering - 0.7.91-36 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + * Tue Jul 23 2019 DJ Delorie - 0.7.91-35 - Skip ppc64 testsuite until the hangs in koji can be fixed. From d2581840384951145c9a8979df82390661e474d9 Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Thu, 6 Feb 2020 16:07:42 -0500 Subject: [PATCH 13/64] Initialize some variables to avoid gcc warning GCC cannot follow the logic that determines if it's safe to free lrhs in expr.c. Initializing these variables to NULL silences this warning. Resolves: #1799619 --- ltrace-0.7.91-rh1799619.patch | 16 ++++++++++++++++ ltrace.spec | 9 ++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 ltrace-0.7.91-rh1799619.patch diff --git a/ltrace-0.7.91-rh1799619.patch b/ltrace-0.7.91-rh1799619.patch new file mode 100644 index 0000000..ceef540 --- /dev/null +++ b/ltrace-0.7.91-rh1799619.patch @@ -0,0 +1,16 @@ +diff -rup a/expr.c b/expr.c +--- a/expr.c 2013-10-10 08:43:55.000000000 -0400 ++++ b/expr.c 2020-02-06 17:05:40.658679755 -0500 +@@ -189,10 +189,10 @@ int + expr_clone(struct expr_node *retp, const struct expr_node *node) + { + *retp = *node; ++ struct expr_node *nlhs; ++ struct expr_node *nrhs = NULL; + + switch (node->kind) { +- struct expr_node *nlhs; +- struct expr_node *nrhs; + + case EXPR_OP_ARGNO: + case EXPR_OP_SELF: diff --git a/ltrace.spec b/ltrace.spec index b5ea596..4b1dd35 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 36%{?dist} +Release: 37%{?dist} URL: http://ltrace.alioth.debian.org/ License: GPLv2+ @@ -123,6 +123,9 @@ Patch33: ltrace-0.7.91-testsuite-system_call_params.patch # Ignore bogus files from the environment Patch34: ltrace-0.7.91-XDG_CONFIG_DIRS.patch +# GCC erroneously warns about uninitialized values +Patch35: ltrace-0.7.91-rh1799619.patch + %description Ltrace is a debugging program which runs a specified command until the command exits. While the command is executing, ltrace intercepts and @@ -169,6 +172,7 @@ execution of processes. %patch32 -p1 %patch33 -p1 %patch34 -p1 +%patch35 -p1 %build autoreconf -i @@ -196,6 +200,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Thu Feb 6 2020 DJ Delorie - 0.7.91-37 +- Initialize some variables to avoid gcc warning (#1799619) + * Wed Jan 29 2020 Fedora Release Engineering - 0.7.91-36 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild From ddce3ea91b59ab1a2373a1b895723ad8936d019d Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Tue, 14 Jul 2020 20:47:11 +0000 Subject: [PATCH 14/64] Use make macros https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro --- ltrace.spec | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ltrace.spec b/ltrace.spec index 4b1dd35..8e593bc 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 37%{?dist} +Release: 38%{?dist} URL: http://ltrace.alioth.debian.org/ License: GPLv2+ @@ -177,10 +177,10 @@ execution of processes. %build autoreconf -i %configure --docdir=%{?_pkgdocdir}%{!?_pkgdocdir:%{_docdir}/%{name}-%{version}} -make %{?_smp_mflags} +%make_build %install -make DESTDIR=$RPM_BUILD_ROOT bindir=%{_bindir} install +%make_install bindir=%{_bindir} # The testsuite is useful for development in real world, but fails in # koji for some reason. Disable it, but have it handy. @@ -200,6 +200,10 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Tue Jul 14 2020 Tom Stellard - 0.7.91-38 +- Use make macros +- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro + * Thu Feb 6 2020 DJ Delorie - 0.7.91-37 - Initialize some variables to avoid gcc warning (#1799619) From 7583740404d8c248d717605657d603b466b18a66 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Tue, 28 Jul 2020 06:22:42 +0000 Subject: [PATCH 15/64] - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- ltrace.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index 8e593bc..7766f83 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 38%{?dist} +Release: 39%{?dist} URL: http://ltrace.alioth.debian.org/ License: GPLv2+ @@ -200,6 +200,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Tue Jul 28 2020 Fedora Release Engineering - 0.7.91-39 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + * Tue Jul 14 2020 Tom Stellard - 0.7.91-38 - Use make macros - https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro From bf46c36d909e2189abfb049c4fb156d735452075 Mon Sep 17 00:00:00 2001 From: Carlos O'Donell Date: Fri, 11 Dec 2020 17:24:04 -0500 Subject: [PATCH 16/64] Document official upstream. --- ltrace.spec | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index 7766f83..da71b4f 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -2,7 +2,9 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 Release: 39%{?dist} -URL: http://ltrace.alioth.debian.org/ +# In coordination with Juan Céspedes, upstream is now officially on gitlab. +# We are going to being sending all of our Fedora patches upstream to gitlab. +URL: https://gitlab.com/cespedes/ltrace License: GPLv2+ BuildRequires: elfutils-devel dejagnu From a3bd583aeed4a542c5fb92c6b9a937aba39ed3b9 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Tue, 5 Jan 2021 03:29:12 +0000 Subject: [PATCH 17/64] Add BuildRequires: make https://fedoraproject.org/wiki/Changes/Remove_make_from_BuildRoot --- ltrace.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/ltrace.spec b/ltrace.spec index da71b4f..9c3489e 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -11,6 +11,7 @@ BuildRequires: elfutils-devel dejagnu BuildRequires: libselinux-devel BuildRequires: autoconf automake libtool BuildRequires: gcc-c++ +BuildRequires: make # Note: this URL needs to be updated for each release, as the file # number changes for each file. Full list of released files is at: From e84d51dcc075ffd61ba4c58866961d285deceaac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Mon, 18 Jan 2021 16:44:54 +0100 Subject: [PATCH 18/64] Introduce CI gating with a simple test --- .fmf/version | 1 + gating.yaml | 13 ++++ plans/ci.fmf | 6 ++ tests/README | 2 + tests/Sanity/broken-binary-handling/Makefile | 63 ++++++++++++++++++ tests/Sanity/broken-binary-handling/PURPOSE | 3 + .../broken-binary-handling/broken.bin.gz | Bin 0 -> 98095 bytes tests/Sanity/broken-binary-handling/main.fmf | 14 ++++ .../Sanity/broken-binary-handling/runtest.sh | 56 ++++++++++++++++ 9 files changed, 158 insertions(+) create mode 100644 .fmf/version create mode 100644 gating.yaml create mode 100644 plans/ci.fmf create mode 100644 tests/README create mode 100644 tests/Sanity/broken-binary-handling/Makefile create mode 100644 tests/Sanity/broken-binary-handling/PURPOSE create mode 100644 tests/Sanity/broken-binary-handling/broken.bin.gz create mode 100644 tests/Sanity/broken-binary-handling/main.fmf create mode 100755 tests/Sanity/broken-binary-handling/runtest.sh diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/gating.yaml b/gating.yaml new file mode 100644 index 0000000..4fab4ec --- /dev/null +++ b/gating.yaml @@ -0,0 +1,13 @@ +--- !Policy +product_versions: + - fedora-* +decision_context: bodhi_update_push_stable +subject_type: koji_build +rules: + - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional} +--- !Policy +product_versions: + - rhel-9 +decision_context: osci_compose_gate +rules: + - !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1.functional} diff --git a/plans/ci.fmf b/plans/ci.fmf new file mode 100644 index 0000000..1ad2c12 --- /dev/null +++ b/plans/ci.fmf @@ -0,0 +1,6 @@ +summary: CI Gating Plan +discover: + how: fmf + directory: tests +execute: + how: beakerlib diff --git a/tests/README b/tests/README new file mode 100644 index 0000000..bf13c2b --- /dev/null +++ b/tests/README @@ -0,0 +1,2 @@ +The test's Makefiles are not used in Fedora CI infrastructure. But are kept here + for backward compatibility with traditional beakerlib test harness in RHEL. diff --git a/tests/Sanity/broken-binary-handling/Makefile b/tests/Sanity/broken-binary-handling/Makefile new file mode 100644 index 0000000..c7ef76f --- /dev/null +++ b/tests/Sanity/broken-binary-handling/Makefile @@ -0,0 +1,63 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /tools/ltrace/Sanity/broken-binary-handling +# Description: Try to trace broken binary by ltrace +# Author: Michal Nowak +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2011 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/tools/ltrace/Sanity/broken-binary-handling +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE broken.bin.gz + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Michal Nowak " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Try to trace broken binary by ltrace" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: ltrace" >> $(METADATA) + @echo "Requires: ltrace gzip" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: yes" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Sanity/broken-binary-handling/PURPOSE b/tests/Sanity/broken-binary-handling/PURPOSE new file mode 100644 index 0000000..e6b9426 --- /dev/null +++ b/tests/Sanity/broken-binary-handling/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /tools/ltrace/Sanity/broken-binary-handling +Description: Try to trace broken binary by ltrace +Author: Michal Nowak diff --git a/tests/Sanity/broken-binary-handling/broken.bin.gz b/tests/Sanity/broken-binary-handling/broken.bin.gz new file mode 100644 index 0000000000000000000000000000000000000000..4fd81171603fae16743f68760e91c584ceef601c GIT binary patch literal 98095 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 +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +- gzip +duration: 5m +extra-summary: /tools/ltrace/Sanity/broken-binary-handling +extra-task: /tools/ltrace/Sanity/broken-binary-handling diff --git a/tests/Sanity/broken-binary-handling/runtest.sh b/tests/Sanity/broken-binary-handling/runtest.sh new file mode 100755 index 0000000..6558c78 --- /dev/null +++ b/tests/Sanity/broken-binary-handling/runtest.sh @@ -0,0 +1,56 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/ltrace/Sanity/broken-binary-handling +# Description: Try to trace broken binary by ltrace +# Author: Michal Nowak +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2011 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="$(rpm -qf $(which ltrace))" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + + rlRun "TmpDir=\`mktemp -d\`" 0 "Creating tmp directory" + cp broken.bin.gz $TmpDir + rlRun "pushd $TmpDir" + gunzip broken.bin.gz + chmod +x broken.bin + rlPhaseEnd + + rlPhaseStartTest + rlRun "ltrace -f ./broken.bin > out 2>&1 " 1 "ltrace can't trace broken.bin" + OUT=`cat out` + rlLog "LOG: $OUT" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd From 5ec9ca7d89fb5ebb73112f7ffc37934096c149b1 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Tue, 26 Jan 2021 18:46:42 +0000 Subject: [PATCH 19/64] - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- ltrace.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index 9c3489e..979ab79 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 39%{?dist} +Release: 40%{?dist} # In coordination with Juan Céspedes, upstream is now officially on gitlab. # We are going to being sending all of our Fedora patches upstream to gitlab. URL: https://gitlab.com/cespedes/ltrace @@ -203,6 +203,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Tue Jan 26 2021 Fedora Release Engineering - 0.7.91-40 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + * Tue Jul 28 2020 Fedora Release Engineering - 0.7.91-39 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild From 7fad3fa72c174c7070ce990b38f1d3109f72ce22 Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Mon, 8 Feb 2021 15:12:55 -0500 Subject: [PATCH 20/64] Support ppc64le SCV syscall insn If the kernel supports it AND glibc supports it, the ppc64le syscalls may use the SCV variant instead of the SC variant. The registers we care about have the same use so little change is required. Reference: RHEL BZ 1922305 --- ltrace-0.7.91-ppc64le-scv.patch | 20 ++++++++++++++++++++ ltrace.spec | 9 ++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 ltrace-0.7.91-ppc64le-scv.patch diff --git a/ltrace-0.7.91-ppc64le-scv.patch b/ltrace-0.7.91-ppc64le-scv.patch new file mode 100644 index 0000000..2feec6d --- /dev/null +++ b/ltrace-0.7.91-ppc64le-scv.patch @@ -0,0 +1,20 @@ +diff -rup a/sysdeps/linux-gnu/ppc/trace.c b/sysdeps/linux-gnu/ppc/trace.c +--- a/sysdeps/linux-gnu/ppc/trace.c 2021-02-08 14:35:16.876494095 -0500 ++++ b/sysdeps/linux-gnu/ppc/trace.c 2021-02-08 15:05:59.468107311 -0500 +@@ -57,6 +57,7 @@ get_arch_dep(struct process *proc) + } + + #define SYSCALL_INSN 0x44000002 ++#define SYSCALL2_INSN 0x44000001 + + /* Returns 1 if syscall, 2 if sysret, 0 otherwise. */ + int +@@ -75,7 +76,7 @@ syscall_p(struct process *proc, int stat + 0); + #endif + +- if (insn == SYSCALL_INSN) { ++ if (insn == SYSCALL_INSN || insn == SYSCALL2_INSN) { + *sysnum = + (int)ptrace(PTRACE_PEEKUSER, proc->pid, + sizeof(long) * PT_R0, 0); diff --git a/ltrace.spec b/ltrace.spec index 979ab79..7602f71 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 40%{?dist} +Release: 41%{?dist} # In coordination with Juan Céspedes, upstream is now officially on gitlab. # We are going to being sending all of our Fedora patches upstream to gitlab. URL: https://gitlab.com/cespedes/ltrace @@ -129,6 +129,9 @@ Patch34: ltrace-0.7.91-XDG_CONFIG_DIRS.patch # GCC erroneously warns about uninitialized values Patch35: ltrace-0.7.91-rh1799619.patch +# Support for both SC and SCV sycall insns +Patch36: ltrace-0.7.91-ppc64le-scv.patch + %description Ltrace is a debugging program which runs a specified command until the command exits. While the command is executing, ltrace intercepts and @@ -176,6 +179,7 @@ execution of processes. %patch33 -p1 %patch34 -p1 %patch35 -p1 +%patch36 -p1 %build autoreconf -i @@ -203,6 +207,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Mon Feb 8 2021 DJ Delorie - 0.7.91-41 +- Add support for SCV syscall insn for ppc64le + * Tue Jan 26 2021 Fedora Release Engineering - 0.7.91-40 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild From fa03fb9fb0ee83df003f32e655bb39163b167b7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Wed, 19 May 2021 13:16:01 +0200 Subject: [PATCH 21/64] Import RHEL's regression test for #1427140 --- .../Makefile | 64 +++++++++++++++++++ .../PURPOSE | 5 ++ .../main.fmf | 27 ++++++++ .../runtest.sh | 55 ++++++++++++++++ 4 files changed, 151 insertions(+) create mode 100644 tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/Makefile create mode 100644 tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/PURPOSE create mode 100644 tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/main.fmf create mode 100755 tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/runtest.sh diff --git a/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/Makefile b/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/Makefile new file mode 100644 index 0000000..664b7c4 --- /dev/null +++ b/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/Makefile @@ -0,0 +1,64 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /tools/ltrace/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch +# Description: Test for BZ#1427140 (ltrace ltrace-0.7.91-unwind-elfutils.patch) +# Author: Michal Kolar +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2017 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/tools/ltrace/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Michal Kolar " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test for BZ#1427140 (ltrace ltrace-0.7.91-unwind-elfutils.patch)" >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 30m" >> $(METADATA) + @echo "RunFor: ltrace" >> $(METADATA) + @echo "Requires: ltrace autoconf automake dejagnu elfutils-devel elfutils-libelf-devel libselinux-devel libtool scl-utils-build yum-utils" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2+" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Bug: 1427140" >> $(METADATA) + @echo "Releases: -RHEL4 -RHELClient5 -RHELServer5" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/PURPOSE b/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/PURPOSE new file mode 100644 index 0000000..321dfcd --- /dev/null +++ b/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/PURPOSE @@ -0,0 +1,5 @@ +PURPOSE of /tools/ltrace/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch +Description: Test for BZ#1427140 (ltrace ltrace-0.7.91-unwind-elfutils.patch) +Author: Michal Kolar +Bug summary: ltrace: ltrace-0.7.91-unwind-elfutils.patch modifies backup file created by previous patch +Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1427140 diff --git a/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/main.fmf b/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/main.fmf new file mode 100644 index 0000000..e8f7554 --- /dev/null +++ b/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/main.fmf @@ -0,0 +1,27 @@ +summary: Test for BZ#1427140 (ltrace ltrace-0.7.91-unwind-elfutils.patch) +description: | + Bug summary: ltrace: ltrace-0.7.91-unwind-elfutils.patch modifies backup file created by previous patch + Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1427140 +contact: Michal Kolar +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +- autoconf +- automake +- dejagnu +- elfutils-devel +- elfutils-libelf-devel +- libselinux-devel +- libtool +- scl-utils-build +- yum-utils +- koji +- rpm-build +duration: 30m +link: +- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1427140 +extra-summary: /tools/ltrace/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch +extra-task: /tools/ltrace/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch diff --git a/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/runtest.sh b/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/runtest.sh new file mode 100755 index 0000000..4f7fecc --- /dev/null +++ b/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/runtest.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/ltrace/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch +# Description: Test for BZ#1427140 (ltrace ltrace-0.7.91-unwind-elfutils.patch) +# Author: Michal Kolar +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2017 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +CMD='ltrace' +BIN=$(which --skip-alias $CMD) +PACKAGE="${PACKAGE:-$(rpm -qf --qf='%{name}\n' $BIN)}" +export $PACKAGE + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "pushd $TmpDir" + rlRun "koji download-build --arch=src $(rpm -q $PACKAGE)" + rlRun "rpm --define='_topdir $TmpDir' -Uvh *src.rpm" + rlRun "dnf builddep -y SPECS/*.spec" + rlPhaseEnd + + rlPhaseStartTest + rlRun "rpmbuild -bp --define='_topdir $TmpDir' --define='_default_patch_flags -s --no-backup-if-mismatch' --quiet SPECS/*.spec" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd From dc3264a1bc732e3ab96773d249cc8dcf77a77fe3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Wed, 19 May 2021 13:16:01 +0200 Subject: [PATCH 22/64] Import RHEL's regression test for #1360259 --- .../Makefile | 64 +++++++++++++++++ .../PURPOSE | 5 ++ .../main.fmf | 18 +++++ .../runtest.sh | 71 +++++++++++++++++++ 4 files changed, 158 insertions(+) create mode 100644 tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/Makefile create mode 100644 tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/PURPOSE create mode 100644 tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/main.fmf create mode 100755 tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/runtest.sh diff --git a/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/Makefile b/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/Makefile new file mode 100644 index 0000000..66c0e2e --- /dev/null +++ b/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/Makefile @@ -0,0 +1,64 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /tools/ltrace/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option +# Description: Test for BZ#1360259 (ltrace crashes when run on certain processes with the -S option) +# Author: Edjunior Machado +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2018 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/tools/ltrace/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Edjunior Machado " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test for BZ#1360259 (ltrace crashes when run on certain processes with the -S option)" >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: ltrace" >> $(METADATA) + @echo "Requires: ltrace dbus" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2+" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Bug: 1360259" >> $(METADATA) + @echo "Releases: -RHEL4 -RHELClient5 -RHELServer5" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/PURPOSE b/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/PURPOSE new file mode 100644 index 0000000..1ff38ce --- /dev/null +++ b/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/PURPOSE @@ -0,0 +1,5 @@ +PURPOSE of /tools/ltrace/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option +Description: Test for BZ#1360259 (ltrace crashes when run on certain processes with the -S option) +Author: Edjunior Machado +Bug summary: ltrace crashes when run on certain processes with the -S option +Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1360259 diff --git a/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/main.fmf b/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/main.fmf new file mode 100644 index 0000000..5be886c --- /dev/null +++ b/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/main.fmf @@ -0,0 +1,18 @@ +summary: Test for BZ#1360259 (ltrace crashes when run on certain processes with the + -S option) +description: | + Bug summary: ltrace crashes when run on certain processes with the -S option + Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1360259 +contact: Edjunior Machado +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +- dbus +duration: 5m +link: +- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1360259 +extra-summary: /tools/ltrace/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option +extra-task: /tools/ltrace/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option diff --git a/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/runtest.sh b/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/runtest.sh new file mode 100755 index 0000000..1ae4c93 --- /dev/null +++ b/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/runtest.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/ltrace/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option +# Description: Test for BZ#1360259 (ltrace crashes when run on certain processes with the -S option) +# Author: Edjunior Machado +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2018 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +CMD='ltrace' +BIN=$(which --skip-alias $CMD) +PACKAGE="${PACKAGE:-$(rpm -qf --qf='%{name}\n' $BIN)}" + +if rlIsRHEL 9 || rlIsFedora; then + PROC_NAME=dbus-broker + SERVICE_NAME=dbus-broker +elif rlIsRHEL 6; then + PROC_NAME=dbus-daemon + SERVICE_NAME=messagebus +else + PROC_NAME=dbus-daemon + SERVICE_NAME=dbus +fi + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "pgrep $PROC_NAME || service $SERVICE_NAME start" 0 "Checking/starting $SERVICE_NAME" + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "pushd $TmpDir" + rlPhaseEnd + + rlPhaseStartTest + rlRun "PID=$(pidof $PROC_NAME)" + # try to ltrace dbus-daemon. If there is a bug (BZ#1360259), it will crash + rlWatchdog "ltrace -S -p $PID > output.log 2>&1" 30 INT + rlAssertEquals "ltrace is expected to be terminated by watchdog" 1 "$?" + rlLog "output.log: $(cat output.log)" + rlAssertNotGrep "\(Assertion.*failed\|Segmentation fault\)" output.log + rlAssertEquals "$PROC_NAME is expected to be still running" $PID "$(pidof $PROC_NAME)" + rlFileSubmit output.log + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlRun "service $SERVICE_NAME status --no-pager || service $SERVICE_NAME start" 0 "Checking/starting $SERVICE_NAME" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd From cd59e55c7a893340174a308384eb29e6eef8deec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Wed, 19 May 2021 13:16:01 +0200 Subject: [PATCH 23/64] Import RHEL's regression test for #1053765 --- .../Makefile | 64 +++++++++++++++++++ .../PURPOSE | 3 + .../main.fmf | 14 ++++ .../runtest.sh | 59 +++++++++++++++++ 4 files changed, 140 insertions(+) create mode 100644 tests/Regression/bz1053765-invalid-command-assertion-failure/Makefile create mode 100644 tests/Regression/bz1053765-invalid-command-assertion-failure/PURPOSE create mode 100644 tests/Regression/bz1053765-invalid-command-assertion-failure/main.fmf create mode 100755 tests/Regression/bz1053765-invalid-command-assertion-failure/runtest.sh diff --git a/tests/Regression/bz1053765-invalid-command-assertion-failure/Makefile b/tests/Regression/bz1053765-invalid-command-assertion-failure/Makefile new file mode 100644 index 0000000..d6c30c0 --- /dev/null +++ b/tests/Regression/bz1053765-invalid-command-assertion-failure/Makefile @@ -0,0 +1,64 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /tools/ltrace/Regression/bz1053765-invalid-command-assertion-failure +# Description: The test tries to ltrace a non-existing app, ltrace should handle that. +# Author: Michael Petlan +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2014 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/tools/ltrace/Regression/bz1053765-invalid-command-assertion-failure +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Michael Petlan " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: The test tries to ltrace a non-existing app, ltrace should handle that." >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: ltrace" >> $(METADATA) + @echo "Requires: ltrace" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Bug: 1053765" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Regression/bz1053765-invalid-command-assertion-failure/PURPOSE b/tests/Regression/bz1053765-invalid-command-assertion-failure/PURPOSE new file mode 100644 index 0000000..9afbcc2 --- /dev/null +++ b/tests/Regression/bz1053765-invalid-command-assertion-failure/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /tools/ltrace/Regression/bz1053765-invalid-command-assertion-failure +Description: The test tries to ltrace a non-existing app, ltrace should handle that. +Author: Michael Petlan diff --git a/tests/Regression/bz1053765-invalid-command-assertion-failure/main.fmf b/tests/Regression/bz1053765-invalid-command-assertion-failure/main.fmf new file mode 100644 index 0000000..75b068c --- /dev/null +++ b/tests/Regression/bz1053765-invalid-command-assertion-failure/main.fmf @@ -0,0 +1,14 @@ +summary: The test tries to ltrace a non-existing app, ltrace should handle that. +description: '' +contact: Michael Petlan +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +duration: 5m +link: +- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1053765 +extra-summary: /tools/ltrace/Regression/bz1053765-invalid-command-assertion-failure +extra-task: /tools/ltrace/Regression/bz1053765-invalid-command-assertion-failure diff --git a/tests/Regression/bz1053765-invalid-command-assertion-failure/runtest.sh b/tests/Regression/bz1053765-invalid-command-assertion-failure/runtest.sh new file mode 100755 index 0000000..1a18424 --- /dev/null +++ b/tests/Regression/bz1053765-invalid-command-assertion-failure/runtest.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/ltrace/Regression/bz1053765-invalid-command-assertion-failure +# Description: The test tries to ltrace a non-existing app, ltrace should handle that. +# Author: Michael Petlan +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2014 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="$(rpm -qf $(which ltrace))" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlPhaseEnd + + rlPhaseStartTest + rlRun "{ ltrace blahblahblah0123546213208412321 2> err.log > out.log; } 2> superr.log" 1 "Running ltrace with a non-existing binary." + rlAssertNotGrep "Aborted" superr.log + rlAssertNotGrep "destroy" err.log + rlAssertNotGrep "Assertion" err.log + rlAssertNotGrep "assertion" err.log + rlAssertNotGrep "relocs" err.log + rlAssertNotGrep "failed" err.log + echo "==== stderr ====" + cat err.log + echo "==== stdout ====" + cat out.log + echo "==== external stderr ====" + cat superr.log + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm err.log out.log superr.log" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd From 4d182004cfcceca8d5f55d3cc9fcf0d76eed21ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Wed, 19 May 2021 13:16:01 +0200 Subject: [PATCH 24/64] Import RHEL's regression test for #1051221 --- .../Makefile | 64 ++++++++++++++++ .../PURPOSE | 3 + .../hello.c | 7 ++ .../main.fmf | 17 +++++ .../runtest.sh | 74 +++++++++++++++++++ 5 files changed, 165 insertions(+) create mode 100644 tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/Makefile create mode 100644 tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/PURPOSE create mode 100644 tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/hello.c create mode 100644 tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/main.fmf create mode 100755 tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/runtest.sh diff --git a/tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/Makefile b/tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/Makefile new file mode 100644 index 0000000..eca6d5f --- /dev/null +++ b/tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/Makefile @@ -0,0 +1,64 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /tools/ltrace/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64 +# Description: The test tries to workaround of a bz1051221 a little. +# Author: Michael Petlan +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2014 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/tools/ltrace/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64 +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE hello.c + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Michael Petlan " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: The test tries to workaround of a bz1051221 a little." >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: ltrace" >> $(METADATA) + @echo "Requires: ltrace prelink binutils gcc" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Bug: 1051221" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/PURPOSE b/tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/PURPOSE new file mode 100644 index 0000000..94c033b --- /dev/null +++ b/tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /tools/ltrace/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64 +Description: The test tries to workaround of a bz1051221 a little. +Author: Michael Petlan diff --git a/tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/hello.c b/tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/hello.c new file mode 100644 index 0000000..b3c185b --- /dev/null +++ b/tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/hello.c @@ -0,0 +1,7 @@ +#include +#include + +int main(void) +{ + puts("Hello world...\n"); +} diff --git a/tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/main.fmf b/tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/main.fmf new file mode 100644 index 0000000..f91b6d4 --- /dev/null +++ b/tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/main.fmf @@ -0,0 +1,17 @@ +summary: The test tries to workaround of a bz1051221 a little. +description: '' +contact: Michael Petlan +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +- prelink +- binutils +- gcc +duration: 5m +link: +- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1051221 +extra-summary: /tools/ltrace/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64 +extra-task: /tools/ltrace/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64 diff --git a/tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/runtest.sh b/tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/runtest.sh new file mode 100755 index 0000000..6caa6f8 --- /dev/null +++ b/tests/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64/runtest.sh @@ -0,0 +1,74 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/ltrace/Regression/bz1051221-untraced-symbols-cause-sigsegv-ppc64 +# Description: The test tries to workaround of a bz1051221 a little. +# Author: Michael Petlan +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2014 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="ltrace" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "cp hello.c $TmpDir/" + rlRun "pushd $TmpDir" + rlRun "gcc -o hello-raw hello.c" + rlRun "cp hello-raw hello-stripped" + rlRun "strip ./hello-stripped" + if rpm -q prelink; then + rlRun "cp hello-raw hello-prelinked" + rlRun "cp hello-raw hello-stripped-prelinked" + rlRun "cp hello-raw hello-prelinked-stripped" + rlRun "prelink ./hello-prelinked" + rlRun "strip ./hello-stripped-prelinked" + rlRun "prelink hello-stripped-prelinked" + rlRun "prelink hello-prelinked-stripped" + rlRun "strip hello-prelinked-stripped" + fi + rlPhaseEnd + + rlPhaseStartTest + for binary in hello-*; do + rlLog "==== TESTING $binary ====" + rlRun "{ ltrace -e __libc_start_main ./$binary 2> err_$binary.log > out_$binary.log; } 2> superr_$binary.log" + rlAssertNotGrep "Aborted" superr_$binary.log + rlAssertNotGrep "SIGSEGV" superr_$binary.log + rlAssertNotGrep "Segmentation fault" superr_$binary.log + rlAssertNotGrep "killed" err_$binary.log + rlAssertNotGrep "SIGSEGV" err_$binary.log + rlAssertNotGrep "Segmentation fault" err_$binary.log + rlLog "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+" + done + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd From b190a780c0cad4497189e4a7cffcc67f1c339a2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Wed, 19 May 2021 13:16:01 +0200 Subject: [PATCH 25/64] Import RHEL's regression test for #890961 --- .../Makefile | 64 +++++++++++++++++++ .../PURPOSE | 5 ++ .../ksh_bug.ksh | 8 +++ .../main.fmf | 18 ++++++ .../runtest.sh | 58 +++++++++++++++++ 5 files changed, 153 insertions(+) create mode 100644 tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/Makefile create mode 100644 tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/PURPOSE create mode 100644 tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/ksh_bug.ksh create mode 100644 tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/main.fmf create mode 100755 tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/runtest.sh diff --git a/tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/Makefile b/tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/Makefile new file mode 100644 index 0000000..5e95fda --- /dev/null +++ b/tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/Makefile @@ -0,0 +1,64 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /tools/ltrace/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due +# Description: Test for BZ#890961 ([RHEL 5] ltrace crashes with memory corruption due) +# Author: Miroslav Franc +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2013 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/tools/ltrace/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE ksh_bug.ksh + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Miroslav Franc " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test for BZ#890961 ([RHEL 5] ltrace crashes with memory corruption due)" >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: ltrace" >> $(METADATA) + @echo "Requires: ltrace ksh ltrace-debuginfo" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Bug: 890961" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/PURPOSE b/tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/PURPOSE new file mode 100644 index 0000000..d1ca455 --- /dev/null +++ b/tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/PURPOSE @@ -0,0 +1,5 @@ +PURPOSE of /tools/ltrace/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due +Description: Test for BZ#890961 ([RHEL 5] ltrace crashes with memory corruption due) +Author: Miroslav Franc +Bug summary: [RHEL 5] ltrace crashes with memory corruption due to double free() +Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=890961 diff --git a/tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/ksh_bug.ksh b/tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/ksh_bug.ksh new file mode 100644 index 0000000..09f2bf7 --- /dev/null +++ b/tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/ksh_bug.ksh @@ -0,0 +1,8 @@ +#!/usr/bin/env ksh +# from bugzilla https://bugzilla.redhat.com/show_bug.cgi?id=890961 + +echo "Before processing a subshell" + +NUMFILES=$(ls | wc -l) + +echo "After processing a subshell" diff --git a/tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/main.fmf b/tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/main.fmf new file mode 100644 index 0000000..4e0962f --- /dev/null +++ b/tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/main.fmf @@ -0,0 +1,18 @@ +summary: Test for BZ#890961 ([RHEL 5] ltrace crashes with memory corruption due) +description: | + Bug summary: [RHEL 5] ltrace crashes with memory corruption due to double free() + Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=890961 +contact: Miroslav Franc +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +- ksh +- ltrace-debuginfo +duration: 5m +link: +- relates: https://bugzilla.redhat.com/show_bug.cgi?id=890961 +extra-summary: /tools/ltrace/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due +extra-task: /tools/ltrace/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due diff --git a/tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/runtest.sh b/tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/runtest.sh new file mode 100755 index 0000000..5cc8819 --- /dev/null +++ b/tests/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due/runtest.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/ltrace/Regression/bz890961-RHEL-5-ltrace-crashes-with-memory-corruption-due +# Description: Test for BZ#890961 ([RHEL 5] ltrace crashes with memory corruption due) +# Author: Miroslav Franc +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2013 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="$(rpm -qf $(which ltrace))" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlAssertRpm ksh + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "cp ksh_bug.ksh $TmpDir" + rlRun "pushd $TmpDir" + rlPhaseEnd + + for ((i=0; i<10; ++i)); do + rlPhaseStartTest "test... $i" + rlRun "LIBC_FATAL_STDERR_=1 ltrace -f -o ./ltrace.out ksh ./ksh_bug.ksh 2> log.err > log.out" + rlAssertNotGrep 'glibc detected' log.err + rlRun "[[ $(wc -l Date: Wed, 19 May 2021 13:16:01 +0200 Subject: [PATCH 26/64] Import RHEL's regression test for #868281 --- .../Makefile | 67 +++++++++++ .../PURPOSE | 5 + .../main.fmf | 23 ++++ .../runtest.sh | 113 ++++++++++++++++++ 4 files changed, 208 insertions(+) create mode 100644 tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/Makefile create mode 100644 tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/PURPOSE create mode 100644 tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/main.fmf create mode 100755 tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/runtest.sh diff --git a/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/Makefile b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/Makefile new file mode 100644 index 0000000..4f22633 --- /dev/null +++ b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/Makefile @@ -0,0 +1,67 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /tools/ltrace/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries +# Description: Test for BZ#868281 (ltrace doesn't work on PIE binaries) +# Author: Miroslav Franc +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2013 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/tools/ltrace/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Miroslav Franc " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test for BZ#868281 (ltrace doesn't work on PIE binaries)" >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: ltrace" >> $(METADATA) + @echo "Requires: ltrace gcc" >> $(METADATA) + @echo "Requires: libgcc.i686 glibc-devel.i686" >> $(METADATA) # 32-bit + @echo "Requires: libgcc.ppc64 glibc-devel.ppc64" >> $(METADATA) # 32-bit + @echo "Requires: libgcc.s390 glibc-devel.s390" >> $(METADATA) # 32-bit + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Bug: 868281" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/PURPOSE b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/PURPOSE new file mode 100644 index 0000000..6f46d12 --- /dev/null +++ b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/PURPOSE @@ -0,0 +1,5 @@ +PURPOSE of /tools/ltrace/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries +Description: Test for BZ#868281 (ltrace doesn't work on PIE binaries) +Author: Miroslav Franc +Bug summary: ltrace doesn't work on PIE binaries +Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=868281 diff --git a/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/main.fmf b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/main.fmf new file mode 100644 index 0000000..a78d993 --- /dev/null +++ b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/main.fmf @@ -0,0 +1,23 @@ +summary: Test for BZ#868281 (ltrace doesn't work on PIE binaries) +description: | + Bug summary: ltrace doesn't work on PIE binaries + Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=868281 +contact: Miroslav Franc +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +- gcc +- libgcc.i686 +- glibc-devel.i686 +- libgcc.ppc64 +- glibc-devel.ppc64 +- libgcc.s390 +- glibc-devel.s390 +duration: 5m +link: +- relates: https://bugzilla.redhat.com/show_bug.cgi?id=868281 +extra-summary: /tools/ltrace/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries +extra-task: /tools/ltrace/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries diff --git a/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/runtest.sh b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/runtest.sh new file mode 100755 index 0000000..714dfc4 --- /dev/null +++ b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/runtest.sh @@ -0,0 +1,113 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/ltrace/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries +# Description: Test for BZ#868281 (ltrace doesn't work on PIE binaries) +# Author: Miroslav Franc +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2013 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +LTRACE_RPM=$(rpm -qf `which ltrace`) +GCC="${GCC:-$(which gcc)}" +GCC_RPM=$(rpm -qf $GCC) +BINUTILS_RPM=$(rpm -qf `which ld`) + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $LTRACE_RPM + rlAssertRpm $GCC_RPM + rlAssertRpm $BINUTILS_RPM + for arch in $(rlGetPrimaryArch) $(rlGetSecondaryArch); do + rlCheckRpm glibc.$arch + done + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "pushd $TmpDir" + + if [ -d /usr/lib64 ]; then + ARCH=`uname -i` + if [[ $ARCH =~ s390.* ]]; then + if rlIsRHEL '>=8'; then + rlLogInfo "RHEL-8 and newer do not support s390x 31-bit compilation" + MBITS= + else + MBITS=31 + if [[ "$LTRACE_RPM" =~ devtoolset-(9|10) ]] ; then + rlLogInfo "devtoolset-(9|10)-gcc do not support s390, hence using base gcc" + rlRun "GCC=/usr/bin/gcc" + rlAssertRpm $(rpm -qf $GCC) + fi + fi + elif [[ $ARCH =~ ia64|aarch64|ppc64le ]]; then + rlLogInfo "$ARCH does not support 32-bit compilation" + MBITS= + else + MBITS=32 + fi + fi + + rlLogInfo "MBITS=$MBITS" + + rlRun "echo 'int main(){alarm(42);return 0;}'| $GCC -fPIE -pie -x c -o a-native.out -" + rlAssertExists a-native.out + + if [ -n "$MBITS" ]; then + rlRun "echo 'int main(){alarm(42);return 0;}'| $GCC -fPIE -pie -m$MBITS -x c -o a-$MBITS.out -" + rlAssertExists a-$MBITS.out + fi + rlPhaseEnd + + rlPhaseStartTest "Native binary testing" + rlRun "ltrace ./a-native.out > log 2>&1" + LIBC_START_MAIN=true + if [[ "$ARCH" = "x86_64" ]]; then + if rlIsRHEL '>=8' || rlIsFedora; then + rlLogInfo "x86_64: Since RHEL-8 __libc_start_main has been optimized into non-PLT call, no longer ltraced (bz#1654734)" + LIBC_START_MAIN=false + fi + fi + if $LIBC_START_MAIN; then + rlAssertGrep "__libc_start_main" log + fi + rlAssertGrep "alarm(42)" log + rlAssertGrep "exited (status 0)" log + rlLog "log file:\n$(cat log)" + rlPhaseEnd + + if [ -n "$MBITS" ]; then + rlPhaseStartTest "$MBITS bit binary testing" + rlRun "ltrace ./a-$MBITS.out > log-$MBITS 2>&1" + rlAssertGrep "__libc_start_main" log-$MBITS + rlAssertGrep "alarm(42)" log-$MBITS + rlAssertGrep "exited (status 0)" log-$MBITS + rlLog "log file:\n$(cat log-$MBITS)" + rlPhaseEnd + fi + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd From f2f13e861b57fa85edfaa6041a221b581f406595 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Wed, 19 May 2021 13:16:01 +0200 Subject: [PATCH 27/64] Import RHEL's regression test for #797761 --- .../Makefile | 65 +++++++++++++++++ .../PURPOSE | 3 + .../main.fmf | 15 ++++ .../runtest.sh | 69 +++++++++++++++++++ 4 files changed, 152 insertions(+) create mode 100644 tests/Regression/bz797761-ltrace-c-ommits-execl-call/Makefile create mode 100644 tests/Regression/bz797761-ltrace-c-ommits-execl-call/PURPOSE create mode 100644 tests/Regression/bz797761-ltrace-c-ommits-execl-call/main.fmf create mode 100755 tests/Regression/bz797761-ltrace-c-ommits-execl-call/runtest.sh diff --git a/tests/Regression/bz797761-ltrace-c-ommits-execl-call/Makefile b/tests/Regression/bz797761-ltrace-c-ommits-execl-call/Makefile new file mode 100644 index 0000000..e202e57 --- /dev/null +++ b/tests/Regression/bz797761-ltrace-c-ommits-execl-call/Makefile @@ -0,0 +1,65 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /tools/ltrace/Regression/bz797761-ltrace-c-ommits-execl-call +# Description: The test tries to ltrace an app which uses execl calls. +# Author: Michael Petlan +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2013 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/tools/ltrace/Regression/bz797761-ltrace-c-ommits-execl-call +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Michael Petlan " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: The test tries to ltrace an app which uses execl calls." >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: ltrace" >> $(METADATA) + @echo "Requires: ltrace" >> $(METADATA) + @echo "Requires: glibc-devel" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Bug: 797761" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Regression/bz797761-ltrace-c-ommits-execl-call/PURPOSE b/tests/Regression/bz797761-ltrace-c-ommits-execl-call/PURPOSE new file mode 100644 index 0000000..c9adac9 --- /dev/null +++ b/tests/Regression/bz797761-ltrace-c-ommits-execl-call/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /tools/ltrace/Regression/bz797761-ltrace-c-ommits-execl-call +Description: The test tries to ltrace an app which uses execl calls. +Author: Michael Petlan diff --git a/tests/Regression/bz797761-ltrace-c-ommits-execl-call/main.fmf b/tests/Regression/bz797761-ltrace-c-ommits-execl-call/main.fmf new file mode 100644 index 0000000..2617dea --- /dev/null +++ b/tests/Regression/bz797761-ltrace-c-ommits-execl-call/main.fmf @@ -0,0 +1,15 @@ +summary: The test tries to ltrace an app which uses execl calls. +description: '' +contact: Michael Petlan +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +- glibc-devel +duration: 5m +link: +- relates: https://bugzilla.redhat.com/show_bug.cgi?id=797761 +extra-summary: /tools/ltrace/Regression/bz797761-ltrace-c-ommits-execl-call +extra-task: /tools/ltrace/Regression/bz797761-ltrace-c-ommits-execl-call diff --git a/tests/Regression/bz797761-ltrace-c-ommits-execl-call/runtest.sh b/tests/Regression/bz797761-ltrace-c-ommits-execl-call/runtest.sh new file mode 100755 index 0000000..6fffcb4 --- /dev/null +++ b/tests/Regression/bz797761-ltrace-c-ommits-execl-call/runtest.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/ltrace/Regression/bz797761-ltrace-c-ommits-execl-call +# Description: The test tries to ltrace an app which uses execl calls. +# Author: Michael Petlan +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2013 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="ltrace" + +create_reproducer() +{ +cat < reproducer.c +#include +#include +int main () +{ + execl("/bin/ls","ls",0); + return 0; +} +EOF +} + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "pushd $TmpDir" + create_reproducer + rlRun "gcc -o reproducer reproducer.c" + rlPhaseEnd + + rlPhaseStartTest + # The main purpose of this section is to check if the file ltrace-c.log contains the 'exec' substring. + rlRun "ltrace ./reproducer 2>&1 >/dev/null | tee ltrace.log" + rlRun "ltrace -c ./reproducer 2>&1 >/dev/null | tee ltrace-c.log" + rlAssertGrep "exec" ltrace.log + rlAssertGrep "exec" ltrace-c.log + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd From d7b87c04312d8d989e3213d6facd4f9d205bb850 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Wed, 19 May 2021 13:16:01 +0200 Subject: [PATCH 28/64] Import RHEL's regression test for #754096 --- .../Makefile | 64 +++++++++++++++++++ .../PURPOSE | 5 ++ .../main.fmf | 16 +++++ .../runtest.sh | 52 +++++++++++++++ 4 files changed, 137 insertions(+) create mode 100644 tests/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by/Makefile create mode 100644 tests/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by/PURPOSE create mode 100644 tests/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by/main.fmf create mode 100755 tests/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by/runtest.sh diff --git a/tests/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by/Makefile b/tests/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by/Makefile new file mode 100644 index 0000000..9960d98 --- /dev/null +++ b/tests/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by/Makefile @@ -0,0 +1,64 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /tools/ltrace/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by +# Description: Test for BZ#754096 (ltrace crashes on PowerPC if tracing is limited by) +# Author: Miroslav Franc +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2013 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/tools/ltrace/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Miroslav Franc " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test for BZ#754096 (ltrace crashes on PowerPC if tracing is limited by)" >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 2m" >> $(METADATA) + @echo "RunFor: ltrace" >> $(METADATA) + @echo "Requires: ltrace" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Bug: 754096" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by/PURPOSE b/tests/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by/PURPOSE new file mode 100644 index 0000000..8953b3d --- /dev/null +++ b/tests/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by/PURPOSE @@ -0,0 +1,5 @@ +PURPOSE of /tools/ltrace/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by +Description: Test for BZ#754096 (ltrace crashes on PowerPC if tracing is limited by) +Author: Miroslav Franc +Bug summary: ltrace crashes on PowerPC if tracing is limited by `-e' to event not present in trace +Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=754096 diff --git a/tests/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by/main.fmf b/tests/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by/main.fmf new file mode 100644 index 0000000..3c01c00 --- /dev/null +++ b/tests/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by/main.fmf @@ -0,0 +1,16 @@ +summary: Test for BZ#754096 (ltrace crashes on PowerPC if tracing is limited by) +description: | + Bug summary: ltrace crashes on PowerPC if tracing is limited by `-e' to event not present in trace + Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=754096 +contact: Miroslav Franc +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +duration: 2m +link: +- relates: https://bugzilla.redhat.com/show_bug.cgi?id=754096 +extra-summary: /tools/ltrace/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by +extra-task: /tools/ltrace/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by diff --git a/tests/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by/runtest.sh b/tests/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by/runtest.sh new file mode 100755 index 0000000..d59239d --- /dev/null +++ b/tests/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by/runtest.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/ltrace/Regression/bz754096-ltrace-crashes-on-PowerPC-if-tracing-is-limited-by +# Description: Test for BZ#754096 (ltrace crashes on PowerPC if tracing is limited by) +# Author: Miroslav Franc +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2013 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="$(rpm -qf $(which ltrace))" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "pushd $TmpDir" + rlPhaseEnd + + rlPhaseStartTest + rlRun "ltrace -e puts /bin/true" + rlRun "ltrace -e sprintf /bin/true" + rlRun "ltrace -e puts -e gets /bin/true" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd From ec8db7cf57c9ad64879cd8d6424c65b0d1f6e94d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Wed, 19 May 2021 13:16:01 +0200 Subject: [PATCH 29/64] Import RHEL's regression test for #447404 --- .../Makefile | 60 ++++++++++ .../PURPOSE | 4 + .../main.fmf | 18 +++ .../runtest.sh | 103 ++++++++++++++++++ 4 files changed, 185 insertions(+) create mode 100644 tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/Makefile create mode 100644 tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/PURPOSE create mode 100644 tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/main.fmf create mode 100755 tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/runtest.sh diff --git a/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/Makefile b/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/Makefile new file mode 100644 index 0000000..4b68558 --- /dev/null +++ b/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/Makefile @@ -0,0 +1,60 @@ +# Copyright (c) 2008 Red Hat, Inc. All rights reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author: Michal Nowak + + +TOPLEVEL_NAMESPACE=/tools +PACKAGE_NAME=ltrace +RELATIVE_PATH=Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file + +export TEST=$(TOPLEVEL_NAMESPACE)/$(PACKAGE_NAME)/$(RELATIVE_PATH) +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + chmod a+x ./runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + + +$(METADATA): Makefile + @touch $(METADATA) + @echo "Owner: Michal Nowak " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Description: When executing ltrace command with both -o and -c option, the result of ltrace command is not output into file" >> $(METADATA) + @echo "Bug: 447404" >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: $(PACKAGE_NAME)" >> $(METADATA) + @echo "Requires: $(PACKAGE_NAME) gcc" >> $(METADATA) + @echo "License: GPLv3+" >> $(METADATA) + + rhts-lint $(METADATA) + diff --git a/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/PURPOSE b/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/PURPOSE new file mode 100644 index 0000000..0cd29d1 --- /dev/null +++ b/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/PURPOSE @@ -0,0 +1,4 @@ +When executing ltrace command with both -o and -c option, +the result of ltrace command is not output into the file +which is specified by -o option. + diff --git a/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/main.fmf b/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/main.fmf new file mode 100644 index 0000000..6357723 --- /dev/null +++ b/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/main.fmf @@ -0,0 +1,18 @@ +summary: When executing ltrace command with both -o and -c option, the result of ltrace + command is not output into file +description: "When executing ltrace command with both -o and -c option, \nthe result\ + \ of ltrace command is not output into the file \nwhich is specified by -o option.\n\ + \n" +contact: Michal Nowak +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +- gcc +duration: 5m +link: +- relates: https://bugzilla.redhat.com/show_bug.cgi?id=447404 +extra-summary: /tools/ltrace/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file +extra-task: /tools/ltrace/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file diff --git a/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/runtest.sh b/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/runtest.sh new file mode 100755 index 0000000..77fbfef --- /dev/null +++ b/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/runtest.sh @@ -0,0 +1,103 @@ +#!/bin/bash +# +# Copyright (c) 2008 Red Hat, Inc. All rights reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author: Michal Nowak + +# source the test script helpers +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="$(rpm -qf --queryformat '%{name}' $(which ltrace))" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlAssertRpm $(rpm -qf $(which gcc)) + rlShowRunningKernel + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "pushd $TmpDir" + rlPhaseEnd + + rlPhaseStartTest "ltrace with -o and -c options tracing testing binary" + rlRun "echo 'int main(){alarm(42);return 0;}'| gcc -x c -o test.bin -" + rlRun "ltrace -o ltrace-test.log -c ./test.bin" 0 "ltrace is crunching a testing binary" + rlRun -l "cat ltrace-test.log" + rlAssertGrep "alarm" ltrace-test.log + rlAssertGreater "There has to be something in output file" $(cat ltrace-test.log | wc -l) 5 + rlPhaseEnd + + rlPhaseStartTest "ltrace with -o and -c options tracing system binary" + rlRun "ltrace -o ltrace-test-sys.log -c ls" 0 "ltrace is crunching ls" + rlRun -l "cat ltrace-test-sys.log" + if rlIsRHEL 8; then + case "$PACKAGE" in + "ltrace") + # bz#1655368 was fixed on ltrace-0.7.91-28.el8.x86_64, but it is still reproducible on ppc64le + if [ "$(arch)" = "ppc64le" ]; then + rlLogWarning "RHEL8 ltrace fails to trace system binaries on ppc64le due to bz#1618748/bz#1655368, hence skipping failure checking" + skip_system_binary_test=1 + fi + ;; + "gcc-toolset-9-ltrace" | "gcc-toolset-10-ltrace") + if [ "$(arch)" = "ppc64le" ]; then + rlLogWarning "RHEL8 gcc-toolset-9-ltrace/gcc-toolset-10-ltrace fails to trace system binaries on ppc64le due to bz#1731119, hence skipping failure checking" + skip_system_binary_test=1 + fi + ;; + esac + elif rlIsRHEL 9 && [[ $PACKAGE =~ ^ltrace ]] && [ "$(arch)" = "ppc64le" ]; then + rlLogWarning "RHEL-9 ltrace fails to trace system binaries on ppc64le due to bz#1906881, hence skipping failure checking" + skip_system_binary_test=1 + elif rlIsFedora 33 && [ "$(arch)" = "ppc64le" ]; then + rlLogWarning "FC33 ltrace fails to trace system binaries on ppc64le due to bz#1902770, hence skipping failure checking" + skip_system_binary_test=1 + fi + + # ltrace no longer reports __libc_start_main on rhel-8 x86_64 (rhbz#1654734) + if grep "ioctl" ltrace-test-sys.log; then + if [ $skip_system_binary_test ]; then + rlLogWarning "Test was skipped but it seems ok. Review skip check." + fi + else + if [ $skip_system_binary_test ]; then + rlLogInfo "ltrace output does not contain ioctl calls (expected failure)" + else + rlFail "ltrace output does not contain ioctl calls" + fi + fi + + rlRun "n_lines=$(grep -c . ltrace-test-sys.log)" + if [ $n_lines -gt 10 ]; then + if [ $skip_system_binary_test ]; then + rlLogWarning "Test was skipped but it seems ok. Review skip check." + fi + else + if [ $skip_system_binary_test ]; then + rlLogInfo "ltrace output does not contain more than 10 lines (expected failure)" + else + rlFail "ltrace output does not contain more than 10 lines" + fi + fi + rlPhaseEnd + + rlPhaseStartCleanup "Doing clean-up" + rlFileSubmit ltrace-test.log + rlFileSubmit ltrace-test-sys.log + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd + rlJournalPrintText +rlJournalEnd From 644de0d37c2a18e620ec1045d68e846440484484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Wed, 19 May 2021 13:16:02 +0200 Subject: [PATCH 30/64] Import RHEL's regression test for #427444 --- .../Makefile | 62 +++++++++++++++++ .../PURPOSE | 1 + .../main.fmf | 17 +++++ .../reproducer.c | 69 +++++++++++++++++++ .../runtest.sh | 46 +++++++++++++ 5 files changed, 195 insertions(+) create mode 100644 tests/Regression/427444-ltrace-crashes-process-to-be-analysed/Makefile create mode 100644 tests/Regression/427444-ltrace-crashes-process-to-be-analysed/PURPOSE create mode 100644 tests/Regression/427444-ltrace-crashes-process-to-be-analysed/main.fmf create mode 100644 tests/Regression/427444-ltrace-crashes-process-to-be-analysed/reproducer.c create mode 100755 tests/Regression/427444-ltrace-crashes-process-to-be-analysed/runtest.sh diff --git a/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/Makefile b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/Makefile new file mode 100644 index 0000000..b3b39d4 --- /dev/null +++ b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/Makefile @@ -0,0 +1,62 @@ +# Copyright (c) 2008 Red Hat, Inc. All rights reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author: Michal Nowak + + +TOPLEVEL_NAMESPACE=/tools +PACKAGE_NAME=ltrace +RELATIVE_PATH=Regression/427444-ltrace-crashes-process-to-be-analysed + +export TEST=$(TOPLEVEL_NAMESPACE)/$(PACKAGE_NAME)/$(RELATIVE_PATH) +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE reproducer.c + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + chmod a+x ./runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + + +$(METADATA): Makefile + @touch $(METADATA) + @echo "Owner: Michal Nowak " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Description: ltrace crashes process to be analysed" >> $(METADATA) + @echo "Bug: 427444" >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: $(PACKAGE_NAME)" >> $(METADATA) + @echo "Requires: $(PACKAGE_NAME)" >> $(METADATA) + @echo "Requires: gcc" >> $(METADATA) + @echo "Requires: glibc-devel" >> $(METADATA) + @echo "License: GPLv3+" >> $(METADATA) + + rhts-lint $(METADATA) + diff --git a/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/PURPOSE b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/PURPOSE new file mode 100644 index 0000000..3d0230b --- /dev/null +++ b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/PURPOSE @@ -0,0 +1 @@ +ltrace could possibly crash traced application on s390 and s390x. diff --git a/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/main.fmf b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/main.fmf new file mode 100644 index 0000000..6430ffa --- /dev/null +++ b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/main.fmf @@ -0,0 +1,17 @@ +summary: ltrace crashes process to be analysed +description: | + ltrace could possibly crash traced application on s390 and s390x. +contact: Michal Nowak +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +- gcc +- glibc-devel +duration: 5m +link: +- relates: https://bugzilla.redhat.com/show_bug.cgi?id=427444 +extra-summary: /tools/ltrace/Regression/427444-ltrace-crashes-process-to-be-analysed +extra-task: /tools/ltrace/Regression/427444-ltrace-crashes-process-to-be-analysed diff --git a/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/reproducer.c b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/reproducer.c new file mode 100644 index 0000000..d0ccb5d --- /dev/null +++ b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/reproducer.c @@ -0,0 +1,69 @@ +#include +#include +#include +#include +#include + + +#ifndef NI_MAXHOST +#define NI_MAXHOST 1025 +#endif // NI_MAX_HOST + +// On a DARWIN system EAI_OVERFLOW is define as EAI_MAX +#ifndef EAI_OVERFLOW +#define EAI_OVERFLOW EAI_MAX +#endif // EAI_OVERFLOW + +int main(int argc, char *argv[]) +{ +// sleep before we can catch you via ltrace + sleep(5); + struct addrinfo * result; + + size_t hostname_len = NI_MAXHOST; + char * hostname = NULL; + + int error; + + if ( 0 != ( error = getaddrinfo( "www.example.com", NULL, NULL, &result ) ) ) + { + fprintf( stderr, "error using getaddrinfo: %s\n", gai_strerror( error ) ); + } + + if ( result ) + { + for( ; ; hostname_len *= 2 ) + { + hostname = ( char * ) realloc( hostname, hostname_len ); + + if ( NULL == hostname ) + { + perror( "" ); + break; + } + + error = getnameinfo( result->ai_addr, result->ai_addrlen, hostname, hostname_len, NULL, 0, 0 ); + + if ( 0 == error ) + { + break; + } + + if ( EAI_OVERFLOW != error ) + { + fprintf( stderr, "error using getaddrinfo: %s\n", gai_strerror( error ) ); + break; + } + } + + if ( NULL != hostname ) + { + free( hostname ); + } + + freeaddrinfo( result ); + } + + return 0; +} + diff --git a/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/runtest.sh b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/runtest.sh new file mode 100755 index 0000000..d945edc --- /dev/null +++ b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/runtest.sh @@ -0,0 +1,46 @@ +#!/bin/bash +# +# Copyright (c) 2008 Red Hat, Inc. All rights reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author: Michal Nowak + +# source the test script helpers +. /usr/bin/rhts_environment.sh +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="$(rpm -qf $(which ltrace))" + +rlJournalStart + rlPhaseStartSetup "Gathering information & compiling" + rlAssertRpm $PACKAGE + rlAssertRpm $(rpm -qf $(which gcc)) + rlShowRunningKernel + + rlRun "gcc reproducer.c -o reproducer" 0 "Compiling the reproducer" + rlPhaseEnd + + rlPhaseStartTest "Testing the executable under ltrace" + rlRun "./reproducer &" 0 "Fire the reproducer in the background" + rlWatchdog "ltrace -o ltrace-test.log -p $( pgrep reproducer )" 200 + rlAssertNotGrep "gimme_arg called with wrong arguments" ltrace-test.log + rlPhaseEnd + + rlPhaseStartCleanup "Doing clean-up" + rlBundleLogs "ltrace-outputs" ltrace-test.log + rlRun "rm -f ltrace-test.log reproducer" + rlPhaseEnd + rlJournalPrintText +rlJournalEnd From 724196798c3bfef09e58d478ace94929afa7009d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Wed, 19 May 2021 13:16:02 +0200 Subject: [PATCH 31/64] Import RHEL's regression test for #235671 --- .../Makefile | 60 +++++++++++++++++++ .../PURPOSE | 2 + .../main.fmf | 16 +++++ .../runtest.sh | 43 +++++++++++++ 4 files changed, 121 insertions(+) create mode 100644 tests/Regression/235671-ltrace-receives-SIGILL-signal/Makefile create mode 100644 tests/Regression/235671-ltrace-receives-SIGILL-signal/PURPOSE create mode 100644 tests/Regression/235671-ltrace-receives-SIGILL-signal/main.fmf create mode 100755 tests/Regression/235671-ltrace-receives-SIGILL-signal/runtest.sh diff --git a/tests/Regression/235671-ltrace-receives-SIGILL-signal/Makefile b/tests/Regression/235671-ltrace-receives-SIGILL-signal/Makefile new file mode 100644 index 0000000..baafe0e --- /dev/null +++ b/tests/Regression/235671-ltrace-receives-SIGILL-signal/Makefile @@ -0,0 +1,60 @@ +# Copyright (c) 2008 Red Hat, Inc. All rights reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author: Michal Nowak + + +TOPLEVEL_NAMESPACE=/tools +PACKAGE_NAME=ltrace +RELATIVE_PATH=Regression/235671-ltrace-receives-SIGILL-signal + +export TEST=$(TOPLEVEL_NAMESPACE)/$(PACKAGE_NAME)/$(RELATIVE_PATH) +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + chmod a+x ./runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + + +$(METADATA): Makefile + @touch $(METADATA) + @echo "Owner: Michal Nowak " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Description: ltrace receives SIGILL signal and terminates" >> $(METADATA) + @echo "Bug: 235671" >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: $(PACKAGE_NAME)" >> $(METADATA) + @echo "Requires: $(PACKAGE_NAME)" >> $(METADATA) + @echo "License: GPLv3+" >> $(METADATA) + + rhts-lint $(METADATA) + diff --git a/tests/Regression/235671-ltrace-receives-SIGILL-signal/PURPOSE b/tests/Regression/235671-ltrace-receives-SIGILL-signal/PURPOSE new file mode 100644 index 0000000..e727338 --- /dev/null +++ b/tests/Regression/235671-ltrace-receives-SIGILL-signal/PURPOSE @@ -0,0 +1,2 @@ +ltrace receives SIGILL signal instead of the ltraced program, +which terminates ltrace. diff --git a/tests/Regression/235671-ltrace-receives-SIGILL-signal/main.fmf b/tests/Regression/235671-ltrace-receives-SIGILL-signal/main.fmf new file mode 100644 index 0000000..f1ba1aa --- /dev/null +++ b/tests/Regression/235671-ltrace-receives-SIGILL-signal/main.fmf @@ -0,0 +1,16 @@ +summary: ltrace receives SIGILL signal and terminates +description: | + ltrace receives SIGILL signal instead of the ltraced program, + which terminates ltrace. +contact: Michal Nowak +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +duration: 5m +link: +- relates: https://bugzilla.redhat.com/show_bug.cgi?id=235671 +extra-summary: /tools/ltrace/Regression/235671-ltrace-receives-SIGILL-signal +extra-task: /tools/ltrace/Regression/235671-ltrace-receives-SIGILL-signal diff --git a/tests/Regression/235671-ltrace-receives-SIGILL-signal/runtest.sh b/tests/Regression/235671-ltrace-receives-SIGILL-signal/runtest.sh new file mode 100755 index 0000000..8682bb6 --- /dev/null +++ b/tests/Regression/235671-ltrace-receives-SIGILL-signal/runtest.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +# Copyright (c) 2008 Red Hat, Inc. All rights reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author: Michal Nowak + +# source the test script helpers +. /usr/bin/rhts_environment.sh +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="$(rpm -qf $(which ltrace))" + +rlJournalStart + rlPhaseStartSetup "Gathering information" + rlAssertRpm $PACKAGE + rlAssertRpm $(rpm -qf $(which gcc)) + rlShowRunningKernel + rlPhaseEnd + + rlPhaseStartTest "Running tar inside ltrace" + rlRun "ltrace -o ltrace-test.log tar" 0 "ltrace is crunching tar" + rlAssertNotGrep "SIGILL" ltrace-test.log -A1 + rlPhaseEnd + + rlPhaseStartCleanup "Doing clean-up" + rlBundleLogs "ltrace-outputs" ltrace-test.log + rlRun "rm -f ltrace-test.log" + rlPhaseEnd + rlJournalPrintText +rlJournalEnd From 6dd7382d3cc24ec3d122e3c6db187e7115b10657 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Wed, 19 May 2021 13:16:02 +0200 Subject: [PATCH 32/64] Import RHEL's regression test for #223732 --- .../223732-man-page-of-ltrace/Makefile | 60 +++++++++++++++++++ .../223732-man-page-of-ltrace/PURPOSE | 7 +++ .../223732-man-page-of-ltrace/main.fmf | 21 +++++++ .../223732-man-page-of-ltrace/runtest.sh | 41 +++++++++++++ 4 files changed, 129 insertions(+) create mode 100644 tests/Regression/223732-man-page-of-ltrace/Makefile create mode 100644 tests/Regression/223732-man-page-of-ltrace/PURPOSE create mode 100644 tests/Regression/223732-man-page-of-ltrace/main.fmf create mode 100755 tests/Regression/223732-man-page-of-ltrace/runtest.sh diff --git a/tests/Regression/223732-man-page-of-ltrace/Makefile b/tests/Regression/223732-man-page-of-ltrace/Makefile new file mode 100644 index 0000000..c303f27 --- /dev/null +++ b/tests/Regression/223732-man-page-of-ltrace/Makefile @@ -0,0 +1,60 @@ +# Copyright (c) 2008 Red Hat, Inc. All rights reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author: Michal Nowak + + +TOPLEVEL_NAMESPACE=/tools +PACKAGE_NAME=ltrace +RELATIVE_PATH=Regression/223732-man-page-of-ltrace + +export TEST=$(TOPLEVEL_NAMESPACE)/$(PACKAGE_NAME)/$(RELATIVE_PATH) +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + chmod a+x ./runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + + +$(METADATA): Makefile + @touch $(METADATA) + @echo "Owner: Michal Nowak " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Description: man page of ltrace had a note about ELF32-support-only" >> $(METADATA) + @echo "Bug: 223732" >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: $(PACKAGE_NAME)" >> $(METADATA) + @echo "Requires: $(PACKAGE_NAME)" >> $(METADATA) + @echo "License: GPLv3+" >> $(METADATA) + + rhts-lint $(METADATA) + diff --git a/tests/Regression/223732-man-page-of-ltrace/PURPOSE b/tests/Regression/223732-man-page-of-ltrace/PURPOSE new file mode 100644 index 0000000..8f8da66 --- /dev/null +++ b/tests/Regression/223732-man-page-of-ltrace/PURPOSE @@ -0,0 +1,7 @@ +Man page of ltrace said, +'Only ELF32 binaries are supported.' + +I seemed ltrace does not support ia64 architecture. + +That's not true. + diff --git a/tests/Regression/223732-man-page-of-ltrace/main.fmf b/tests/Regression/223732-man-page-of-ltrace/main.fmf new file mode 100644 index 0000000..ef24105 --- /dev/null +++ b/tests/Regression/223732-man-page-of-ltrace/main.fmf @@ -0,0 +1,21 @@ +summary: man page of ltrace had a note about ELF32-support-only +description: |+ + Man page of ltrace said, + 'Only ELF32 binaries are supported.' + + I seemed ltrace does not support ia64 architecture. + + That's not true. + +contact: Michal Nowak +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +duration: 5m +link: +- relates: https://bugzilla.redhat.com/show_bug.cgi?id=223732 +extra-summary: /tools/ltrace/Regression/223732-man-page-of-ltrace +extra-task: /tools/ltrace/Regression/223732-man-page-of-ltrace diff --git a/tests/Regression/223732-man-page-of-ltrace/runtest.sh b/tests/Regression/223732-man-page-of-ltrace/runtest.sh new file mode 100755 index 0000000..3f794dc --- /dev/null +++ b/tests/Regression/223732-man-page-of-ltrace/runtest.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# Copyright (c) 2008 Red Hat, Inc. All rights reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author: Michal Nowak + +# source the test script helpers +. /usr/bin/rhts_environment.sh +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE=ltrace + +rlJournalStart + rlPhaseStartSetup "Gathering information" + rlShowPackageVersion $PACKAGE + rlShowRunningKernel + rlPhaseEnd + + rlPhaseStartTest "Running tar inside ltrace" + man ltrace > trace.man + rlAssertNotGrep "Only ELF32 binaries are supported" trace.man + rlPhaseEnd + + rlPhaseStartCleanup "Doing clean-up" + rm -f trace.man + rlPhaseEnd + rlJournalPrintText +rlJournalEnd From 6c7c2d2b361fe8bf8120d20ec2d588ada36695fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Wed, 19 May 2021 13:16:02 +0200 Subject: [PATCH 33/64] Import RHEL's regression test for #211163 --- .../Makefile | 61 ++++++++++ .../PURPOSE | 1 + .../main.fmf | 17 +++ .../reproducer.c | 9 ++ .../runtest.sh | 109 ++++++++++++++++++ 5 files changed, 197 insertions(+) create mode 100644 tests/Regression/211163-ltrace-with--c-omit-execl-call/Makefile create mode 100644 tests/Regression/211163-ltrace-with--c-omit-execl-call/PURPOSE create mode 100644 tests/Regression/211163-ltrace-with--c-omit-execl-call/main.fmf create mode 100644 tests/Regression/211163-ltrace-with--c-omit-execl-call/reproducer.c create mode 100755 tests/Regression/211163-ltrace-with--c-omit-execl-call/runtest.sh diff --git a/tests/Regression/211163-ltrace-with--c-omit-execl-call/Makefile b/tests/Regression/211163-ltrace-with--c-omit-execl-call/Makefile new file mode 100644 index 0000000..30571dd --- /dev/null +++ b/tests/Regression/211163-ltrace-with--c-omit-execl-call/Makefile @@ -0,0 +1,61 @@ +# Copyright (c) 2008 Red Hat, Inc. All rights reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author: Michal Nowak + + +TOPLEVEL_NAMESPACE=/tools +PACKAGE_NAME=ltrace +RELATIVE_PATH=Regression/211163-ltrace-with--c-omit-execl-call + +export TEST=/tools/ltrace/Regression/211163-ltrace-with--c-omit-execl-call +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE reproducer.c + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + chmod a+x ./runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + + +$(METADATA): Makefile + @echo "Owner: Michal Nowak " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: ltrace with -c omit execl call" >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: ltrace" >> $(METADATA) + @echo "Requires: ltrace gcc glibc-devel" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv3+" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Bug: 211163 528466" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Regression/211163-ltrace-with--c-omit-execl-call/PURPOSE b/tests/Regression/211163-ltrace-with--c-omit-execl-call/PURPOSE new file mode 100644 index 0000000..4dd4371 --- /dev/null +++ b/tests/Regression/211163-ltrace-with--c-omit-execl-call/PURPOSE @@ -0,0 +1 @@ +ltrace with -c omit execl call diff --git a/tests/Regression/211163-ltrace-with--c-omit-execl-call/main.fmf b/tests/Regression/211163-ltrace-with--c-omit-execl-call/main.fmf new file mode 100644 index 0000000..aa6cfa6 --- /dev/null +++ b/tests/Regression/211163-ltrace-with--c-omit-execl-call/main.fmf @@ -0,0 +1,17 @@ +summary: ltrace with -c omit execl call +description: | + ltrace with -c omit execl call +contact: Michal Nowak +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +- gcc +- glibc-devel +duration: 5m +link: +- relates: https://bugzilla.redhat.com/show_bug.cgi?id=211163 +extra-summary: /tools/ltrace/Regression/211163-ltrace-with--c-omit-execl-call +extra-task: /tools/ltrace/Regression/211163-ltrace-with--c-omit-execl-call diff --git a/tests/Regression/211163-ltrace-with--c-omit-execl-call/reproducer.c b/tests/Regression/211163-ltrace-with--c-omit-execl-call/reproducer.c new file mode 100644 index 0000000..7a7847e --- /dev/null +++ b/tests/Regression/211163-ltrace-with--c-omit-execl-call/reproducer.c @@ -0,0 +1,9 @@ +#include +#include + +int main() +{ + execl("/bin/ls","ls",0); + return 0; +} + diff --git a/tests/Regression/211163-ltrace-with--c-omit-execl-call/runtest.sh b/tests/Regression/211163-ltrace-with--c-omit-execl-call/runtest.sh new file mode 100755 index 0000000..68b0814 --- /dev/null +++ b/tests/Regression/211163-ltrace-with--c-omit-execl-call/runtest.sh @@ -0,0 +1,109 @@ +#!/bin/bash + +# Copyright (c) 2008 Red Hat, Inc. All rights reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author: Michal Nowak + +# source the test script helpers +. /usr/bin/rhts_environment.sh +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE=$(rpm -qf $(which ltrace)) + +rlJournalStart + rlPhaseStartSetup "Gathering information & compiling" + rlAssertRpm $PACKAGE + rlAssertRpm $(rpm -qf $(which gcc)) + rlShowRunningKernel + + rlRun "gcc reproducer.c -o reproducer" 0 "Compiling the reproducer" + rlPhaseEnd + + rlPhaseStartTest "Counting the number of calls noted by ltrace" + rlRun "ltrace -o ltrace-test-c.log -c ./reproducer" 0 "Execute reproducer" + rlRun "cat -n ltrace-test-c.log" + # Check if exec is not omitted (rhbz#797761) + rlAssertGrep "exec" ltrace-test-c.log + + # Check if ltrace is able to trace system binaries with execl /bin/ls (rhbz#1618748/rhbz#1655368/rhbz#1731119) + if rlIsRHEL 8; then + case "$PACKAGE" in + ltrace*) + # bz#1655368 was fixed on ltrace-0.7.91-28.el8.x86_64, but it is still reproducible on ppc64le + if [ "$(arch)" = "ppc64le" ]; then + rlLogWarning "RHEL8 ltrace fails to trace system binaries on ppc64le due to bz#1618748/bz#1655368, hence skipping failure checking" + skip_test=1 + fi + ;; + gcc-toolset-*) + if [ "$(arch)" = "ppc64le" ]; then + rlLogWarning "RHEL8 gcc-toolset-*-ltrace fails to trace system binaries on ppc64le due to bz#1731119, hence skipping failure checking" + skip_test=1 + fi + ;; + esac + elif rlIsRHEL 9 && [[ $PACKAGE =~ ^ltrace ]] && [ "$(arch)" = "ppc64le" ]; then + rlLogWarning "RHEL-9 ltrace fails to trace system binaries on ppc64le due to bz#1906881, hence skipping failure checking" + skip_test=1 + elif rlIsFedora 33 && [ "$(arch)" = "ppc64le" ]; then + rlLogWarning "FC33 ltrace fails to trace system binaries on ppc64le due to bz#1902770, hence skipping failure checking" + skip_test=1 + fi + + rlRun "n_lines_c=$(grep -c . ltrace-test-c.log)" + if [ $n_lines_c -gt 20 ]; then + if [ $skip_test ]; then + rlLogWarning "Test was skipped but it seems ok. Review skip check." + fi + else + if [ $skip_test ]; then + rlLogInfo"'ltrace -c ./reproducer' does not report more than 20 lines of trace summary output (expected failure)" + else + rlFail "'ltrace -c ./reproducer' does not report more than 20 lines of trace summary output" + fi + fi + rlPhaseEnd + + rlPhaseStartTest "Looking for SEGFAULT of reproducer under ltrace" + rlRun "ltrace -o ltrace-test.log ./reproducer" 0 "Execute reproducer" + rlRun "cat -n ltrace-test.log" + # Check if neither segfault nor 'unexpected breakpoint' errors occur (rhbz#211163) + rlAssertNotGrep "SIGSEGV" ltrace-test.log + rlAssertNotGrep "unexpected breakpoint" ltrace-test.log + # Check if exec is not omitted (rhbz#797761) + rlAssertGrep "exec" ltrace-test.log + + # Check if ltrace is able to trace system binaries with execl /bin/ls (rhbz#1618748/rhbz#1655368/rhbz#1731119) + rlRun "n_lines=$(grep -c . ltrace-test.log)" + if [ $n_lines -gt 20 ]; then + if [ $skip_test ]; then + rlLogWarning "Test was skipped but it seems ok. Review skip check." + fi + else + if [ $skip_test ]; then + rlLogInfo"'ltrace ./reproducer' does not report more than 20 lines of trace summary output (expected failure)" + else + rlFail "'ltrace ./reproducer' does not report more than 20 lines of trace summary output" + fi + fi + rlPhaseEnd + + rlPhaseStartCleanup "Doing clean-up" + rlBundleLogs "ltrace-outputs" ltrace-test.log ltrace-test-c.log + rlRun "rm -f ltrace-test.log ltrace-test-c.log reproducer" + rlPhaseEnd + rlJournalPrintText +rlJournalEnd From 9af7a027b204184dd0c7f5f8403dd37b3eec18a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Wed, 19 May 2021 13:16:02 +0200 Subject: [PATCH 34/64] Import RHEL's regression test for #211135 --- .../Makefile | 61 +++++++++++++++++++ .../PURPOSE | 2 + .../main.fmf | 17 ++++++ .../reproducer.c | 31 ++++++++++ .../runtest.sh | 49 +++++++++++++++ 5 files changed, 160 insertions(+) create mode 100644 tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/Makefile create mode 100644 tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/PURPOSE create mode 100644 tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/main.fmf create mode 100644 tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/reproducer.c create mode 100755 tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/runtest.sh diff --git a/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/Makefile b/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/Makefile new file mode 100644 index 0000000..67183de --- /dev/null +++ b/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/Makefile @@ -0,0 +1,61 @@ +# Copyright (c) 2008 Red Hat, Inc. All rights reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author: Michal Nowak + + +TOPLEVEL_NAMESPACE=/tools +PACKAGE_NAME=ltrace +RELATIVE_PATH=Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option + +export TEST=$(TOPLEVEL_NAMESPACE)/$(PACKAGE_NAME)/$(RELATIVE_PATH) +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE reproducer.c + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + chmod a+x ./runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + + +$(METADATA): Makefile + @touch $(METADATA) + @echo "Owner: Michal Nowak " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Description: ltrace hangs while tracing child process with -f option" >> $(METADATA) + @echo "Bug: 211135" >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: $(PACKAGE_NAME)" >> $(METADATA) + @echo "Requires: $(PACKAGE_NAME)" >> $(METADATA) + @echo "Requires: glibc-devel" >> $(METADATA) + @echo "License: GPLv3+" >> $(METADATA) + + rhts-lint $(METADATA) + diff --git a/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/PURPOSE b/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/PURPOSE new file mode 100644 index 0000000..2c9e3fd --- /dev/null +++ b/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/PURPOSE @@ -0,0 +1,2 @@ +ltrace could possibly crash/hang when tracing fork() on ppc/ppc64 +in ltrace with option "-f". diff --git a/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/main.fmf b/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/main.fmf new file mode 100644 index 0000000..f0627ff --- /dev/null +++ b/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/main.fmf @@ -0,0 +1,17 @@ +summary: ltrace hangs while tracing child process with -f option +description: | + ltrace could possibly crash/hang when tracing fork() on ppc/ppc64 + in ltrace with option "-f". +contact: Michal Nowak +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +- glibc-devel +duration: 5m +link: +- relates: https://bugzilla.redhat.com/show_bug.cgi?id=211135 +extra-summary: /tools/ltrace/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option +extra-task: /tools/ltrace/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option diff --git a/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/reproducer.c b/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/reproducer.c new file mode 100644 index 0000000..1d11ad6 --- /dev/null +++ b/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/reproducer.c @@ -0,0 +1,31 @@ +/* Ltrace Test : trace-fork.c + * Objectives : Verify that ltrace can trace to child process after + * fork called. + * + * This file was written by Yao Qi + * + */ + +#include +#include + +void child() { + printf("Fork Child\n"); + sleep(1); +} + +int main() { + pid_t pid; + pid = fork (); + + if (pid == -1) + printf("fork failed!\n"); + else if (pid == 0) + child(); + else { + printf("My child pid is %d\n",pid); + wait(); + } + return 0; +} + diff --git a/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/runtest.sh b/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/runtest.sh new file mode 100755 index 0000000..ce3bf9f --- /dev/null +++ b/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/runtest.sh @@ -0,0 +1,49 @@ +#!/bin/bash +# +# Copyright (c) 2008 Red Hat, Inc. All rights reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author: Michal Nowak + +# source the test script helpers +. /usr/bin/rhts_environment.sh +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="$(rpm -qf $(which ltrace))" + +rlJournalStart + rlPhaseStartSetup "Gathering information & compiling" + rlAssertRpm $PACKAGE + rlAssertRpm $(rpm -qf $(which gcc)) + rlShowRunningKernel + + rlRun "gcc reproducer.c -o reproducer" 0 "Compiling the reproducer" + rlPhaseEnd + + rlPhaseStartTest + rlRun "ltrace -o ltrace-test.log -f ./reproducer" 0 "'ltrace -f' is crunching the reproducer" + + rlAssertGrep "My child pid is" ltrace-test.log + rlAssertNotGrep "signal from wrong pid" ltrace-test.log + rlAssertGrep "SIGCHLD (Child exited)" ltrace-test.log + rlAssertNotGrep "Cannot attach to pid" ltrace-test.log + rlPhaseEnd + + rlPhaseStartCleanup "Doing clean-up" + rlBundleLogs "ltrace-outputs" ltrace-test.log + rlRun "rm -f ltrace-test.log reproducer" + rlPhaseEnd + rlJournalPrintText +rlJournalEnd From f20f6a9ea6142c1f833e298849d80e8440609d1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Wed, 19 May 2021 13:24:04 +0200 Subject: [PATCH 35/64] Import RHEL's regression test for #1158713 Note: I've prefixed the test with "bz1158713-" because ltrace's repo in Fedora ignores "ltrace-*/". See the .gitignore file. --- .../Makefile | 63 +++++++++++ .../PURPOSE | 5 + .../main.fmf | 18 +++ .../runtest.sh | 107 ++++++++++++++++++ 4 files changed, 193 insertions(+) create mode 100644 tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/Makefile create mode 100644 tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/PURPOSE create mode 100644 tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/main.fmf create mode 100755 tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/runtest.sh diff --git a/tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/Makefile b/tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/Makefile new file mode 100644 index 0000000..29d9876 --- /dev/null +++ b/tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/Makefile @@ -0,0 +1,63 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /tools/ltrace/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots +# Description: bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots +# Author: Martin Cermak +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2015 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/tools/ltrace/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Martin Cermak " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots" >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 10m" >> $(METADATA) + @echo "RunFor: ltrace" >> $(METADATA) + @echo "Requires: ltrace gcc gawk" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2+" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Bug: 1158713" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/PURPOSE b/tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/PURPOSE new file mode 100644 index 0000000..87ed099 --- /dev/null +++ b/tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/PURPOSE @@ -0,0 +1,5 @@ +PURPOSE of /tools/ltrace/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots +Description: bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots +Author: Martin Cermak +Bug summary: ltrace assigns wrong names to glibc PLT slots +Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1158713 diff --git a/tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/main.fmf b/tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/main.fmf new file mode 100644 index 0000000..8beae33 --- /dev/null +++ b/tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/main.fmf @@ -0,0 +1,18 @@ +summary: bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots +description: | + Bug summary: ltrace assigns wrong names to glibc PLT slots + Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1158713 +contact: Martin Cermak +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +- gcc +- gawk +duration: 10m +link: +- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1158713 +extra-summary: /tools/ltrace/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots +extra-task: /tools/ltrace/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots diff --git a/tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/runtest.sh b/tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/runtest.sh new file mode 100755 index 0000000..9758773 --- /dev/null +++ b/tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/runtest.sh @@ -0,0 +1,107 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/ltrace/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots +# Description: bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots +# Author: Martin Cermak +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2015 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="$(rpm -qf $(which ltrace))" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlAssertRpm $(rpm -qf $(which gcc)) + rlRun "TMPD=$(mktemp -d)" + rlRun "pushd $TMPD" + + cat > test.c < +#include +#include +#include + +int main() +{ + char *s = malloc(1000); + + // trigger a free() call from libc: + setpwent(); + getpwent(); + endpwent(); + + // print maps + sprintf(s, "grep -F '[heap]' /proc/%d/maps", getpid()); + system (s); + + free(s); +} +EOFA + + cat > test.awk < limit_max) { + print "ERROR 2 ("addrs[i]">"limit_max")" + exit 2 + } + } +} +EOFB + + rlRun "gcc test.c -o test" + rlPhaseEnd + + rlPhaseStartTest + rlRun "ltrace -e free ./test |& tee log | awk -f test.awk" || \ + rlRun "cat log" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $TMPD" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd From d73a4e1684d08fe110d4f777572fc7db6959fab6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Wed, 19 May 2021 13:29:09 +0200 Subject: [PATCH 36/64] Import a regression test from RHEL. Sorry, no specific bug number, it wasn't recorded at that time and now I can't find it, at least easily. --- .../Makefile | 64 ++++++++++++++ .../pthread-program-assertion-failure/PURPOSE | 6 ++ .../main.fmf | 16 ++++ .../runtest.sh | 83 +++++++++++++++++++ 4 files changed, 169 insertions(+) create mode 100644 tests/Regression/pthread-program-assertion-failure/Makefile create mode 100644 tests/Regression/pthread-program-assertion-failure/PURPOSE create mode 100644 tests/Regression/pthread-program-assertion-failure/main.fmf create mode 100755 tests/Regression/pthread-program-assertion-failure/runtest.sh diff --git a/tests/Regression/pthread-program-assertion-failure/Makefile b/tests/Regression/pthread-program-assertion-failure/Makefile new file mode 100644 index 0000000..bb8e743 --- /dev/null +++ b/tests/Regression/pthread-program-assertion-failure/Makefile @@ -0,0 +1,64 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /tools/ltrace/Regression/pthread-program-assertion-failure +# Description: pthread-program-assertion-failure +# Author: Martin Cermak +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2015 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/tools/ltrace/Regression/pthread-program-assertion-failure +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Martin Cermak " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: pthread-program-assertion-failure" >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 10m" >> $(METADATA) + @echo "RunFor: ltrace" >> $(METADATA) + @echo "Requires: ltrace" >> $(METADATA) + @echo "Requires: gcc" >> $(METADATA) + @echo "Requires: glibc-devel" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2+" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Regression/pthread-program-assertion-failure/PURPOSE b/tests/Regression/pthread-program-assertion-failure/PURPOSE new file mode 100644 index 0000000..00eb57b --- /dev/null +++ b/tests/Regression/pthread-program-assertion-failure/PURPOSE @@ -0,0 +1,6 @@ +PURPOSE of /tools/ltrace/Regression/pthread-program-assertion-failure +Description: pthread-program-assertion-failure +Author: Martin Cermak + +Issue reproduced using an f20 arm (32 bit) fedora system with ltrace-0.7.91-13.fc22.armv7hl. + diff --git a/tests/Regression/pthread-program-assertion-failure/main.fmf b/tests/Regression/pthread-program-assertion-failure/main.fmf new file mode 100644 index 0000000..0e9d856 --- /dev/null +++ b/tests/Regression/pthread-program-assertion-failure/main.fmf @@ -0,0 +1,16 @@ +summary: pthread-program-assertion-failure +description: |+ + Issue reproduced using an f20 arm (32 bit) fedora system with ltrace-0.7.91-13.fc22.armv7hl. + +contact: Martin Cermak +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +- gcc +- glibc-devel +duration: 10m +extra-summary: /tools/ltrace/Regression/pthread-program-assertion-failure +extra-task: /tools/ltrace/Regression/pthread-program-assertion-failure diff --git a/tests/Regression/pthread-program-assertion-failure/runtest.sh b/tests/Regression/pthread-program-assertion-failure/runtest.sh new file mode 100755 index 0000000..a2b1c31 --- /dev/null +++ b/tests/Regression/pthread-program-assertion-failure/runtest.sh @@ -0,0 +1,83 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/ltrace/Regression/pthread-program-assertion-failure +# Description: pthread-program-assertion-failure +# Author: Martin Cermak +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2015 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="$(rpm -qf $(which ltrace))" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlAssertRpm $(rpm -qf $(which gcc)) + rlRun "TMP=\$(mktemp -d)" + rlRun "pushd $TMP" + cat > test.c < +#include + +extern void print (char *); + +#define PRINT_LOOP 10 + +void * +th_main (void *arg) +{ + int i; + for (i=0; i Date: Wed, 19 May 2021 14:59:30 +0200 Subject: [PATCH 37/64] Log more information in a regression test To make the bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch work not only for regular builds but for scratch builds as well, we need to know how to refer them. This commit is just a temporary attempt to find the environment variable holding the reference. I'll make use of it in a follow-up commit. --- .../runtest.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/runtest.sh b/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/runtest.sh index 4f7fecc..380c4d6 100755 --- a/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/runtest.sh +++ b/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/runtest.sh @@ -35,6 +35,7 @@ export $PACKAGE rlJournalStart rlPhaseStartSetup + rlLogInfo "$(env)" rlAssertRpm $PACKAGE rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" rlRun "pushd $TmpDir" From 04309572bed8f60c57eb92b4b004e900e1c8ea11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Wed, 19 May 2021 15:40:27 +0200 Subject: [PATCH 38/64] Remove RHEL's test for #1427140 Right now it cannot work; it needs to access the source RPM for the ltrace being tested which, in case of scratch builds, isn't currently possible. --- .../Makefile | 64 ------------------- .../PURPOSE | 5 -- .../main.fmf | 27 -------- .../runtest.sh | 56 ---------------- 4 files changed, 152 deletions(-) delete mode 100644 tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/Makefile delete mode 100644 tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/PURPOSE delete mode 100644 tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/main.fmf delete mode 100755 tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/runtest.sh diff --git a/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/Makefile b/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/Makefile deleted file mode 100644 index 664b7c4..0000000 --- a/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/Makefile +++ /dev/null @@ -1,64 +0,0 @@ -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Makefile of /tools/ltrace/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch -# Description: Test for BZ#1427140 (ltrace ltrace-0.7.91-unwind-elfutils.patch) -# Author: Michal Kolar -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2017 Red Hat, Inc. -# -# This program is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 2 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -export TEST=/tools/ltrace/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch -export TESTVERSION=1.0 - -BUILT_FILES= - -FILES=$(METADATA) runtest.sh Makefile PURPOSE - -.PHONY: all install download clean - -run: $(FILES) build - ./runtest.sh - -build: $(BUILT_FILES) - test -x runtest.sh || chmod a+x runtest.sh - -clean: - rm -f *~ $(BUILT_FILES) - - -include /usr/share/rhts/lib/rhts-make.include - -$(METADATA): Makefile - @echo "Owner: Michal Kolar " > $(METADATA) - @echo "Name: $(TEST)" >> $(METADATA) - @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) - @echo "Path: $(TEST_DIR)" >> $(METADATA) - @echo "Description: Test for BZ#1427140 (ltrace ltrace-0.7.91-unwind-elfutils.patch)" >> $(METADATA) - @echo "Type: Regression" >> $(METADATA) - @echo "TestTime: 30m" >> $(METADATA) - @echo "RunFor: ltrace" >> $(METADATA) - @echo "Requires: ltrace autoconf automake dejagnu elfutils-devel elfutils-libelf-devel libselinux-devel libtool scl-utils-build yum-utils" >> $(METADATA) - @echo "Priority: Normal" >> $(METADATA) - @echo "License: GPLv2+" >> $(METADATA) - @echo "Confidential: no" >> $(METADATA) - @echo "Destructive: no" >> $(METADATA) - @echo "Bug: 1427140" >> $(METADATA) - @echo "Releases: -RHEL4 -RHELClient5 -RHELServer5" >> $(METADATA) - - rhts-lint $(METADATA) diff --git a/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/PURPOSE b/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/PURPOSE deleted file mode 100644 index 321dfcd..0000000 --- a/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/PURPOSE +++ /dev/null @@ -1,5 +0,0 @@ -PURPOSE of /tools/ltrace/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch -Description: Test for BZ#1427140 (ltrace ltrace-0.7.91-unwind-elfutils.patch) -Author: Michal Kolar -Bug summary: ltrace: ltrace-0.7.91-unwind-elfutils.patch modifies backup file created by previous patch -Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1427140 diff --git a/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/main.fmf b/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/main.fmf deleted file mode 100644 index e8f7554..0000000 --- a/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/main.fmf +++ /dev/null @@ -1,27 +0,0 @@ -summary: Test for BZ#1427140 (ltrace ltrace-0.7.91-unwind-elfutils.patch) -description: | - Bug summary: ltrace: ltrace-0.7.91-unwind-elfutils.patch modifies backup file created by previous patch - Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1427140 -contact: Michal Kolar -component: -- ltrace -test: ./runtest.sh -framework: beakerlib -recommend: -- ltrace -- autoconf -- automake -- dejagnu -- elfutils-devel -- elfutils-libelf-devel -- libselinux-devel -- libtool -- scl-utils-build -- yum-utils -- koji -- rpm-build -duration: 30m -link: -- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1427140 -extra-summary: /tools/ltrace/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch -extra-task: /tools/ltrace/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch diff --git a/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/runtest.sh b/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/runtest.sh deleted file mode 100755 index 380c4d6..0000000 --- a/tests/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch/runtest.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash -# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/ltrace/Regression/bz1427140-ltrace-ltrace-0-7-91-unwind-elfutils-patch -# Description: Test for BZ#1427140 (ltrace ltrace-0.7.91-unwind-elfutils.patch) -# Author: Michal Kolar -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2017 Red Hat, Inc. -# -# This program is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 2 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -CMD='ltrace' -BIN=$(which --skip-alias $CMD) -PACKAGE="${PACKAGE:-$(rpm -qf --qf='%{name}\n' $BIN)}" -export $PACKAGE - -rlJournalStart - rlPhaseStartSetup - rlLogInfo "$(env)" - rlAssertRpm $PACKAGE - rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" - rlRun "pushd $TmpDir" - rlRun "koji download-build --arch=src $(rpm -q $PACKAGE)" - rlRun "rpm --define='_topdir $TmpDir' -Uvh *src.rpm" - rlRun "dnf builddep -y SPECS/*.spec" - rlPhaseEnd - - rlPhaseStartTest - rlRun "rpmbuild -bp --define='_topdir $TmpDir' --define='_default_patch_flags -s --no-backup-if-mismatch' --quiet SPECS/*.spec" - rlPhaseEnd - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -r $TmpDir" 0 "Removing tmp directory" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd From 5ed23e066e2d40ea0e94593b5fcfb73e16094b96 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 22 Jul 2021 13:14:52 +0000 Subject: [PATCH 39/64] - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- ltrace.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index 7602f71..67a4ff8 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 41%{?dist} +Release: 42%{?dist} # In coordination with Juan Céspedes, upstream is now officially on gitlab. # We are going to being sending all of our Fedora patches upstream to gitlab. URL: https://gitlab.com/cespedes/ltrace @@ -207,6 +207,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Thu Jul 22 2021 Fedora Release Engineering - 0.7.91-42 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + * Mon Feb 8 2021 DJ Delorie - 0.7.91-41 - Add support for SCV syscall insn for ppc64le From c8ea90148a887a5cf760c5a8c229983b348e9290 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Fri, 9 Jul 2021 16:20:03 +0200 Subject: [PATCH 40/64] Import RHEL's test for RFE #1449588 --- .../Makefile | 64 +++++++++++++++++++ .../PURPOSE | 5 ++ .../main.fmf | 16 +++++ .../runtest.sh | 53 +++++++++++++++ 4 files changed, 138 insertions(+) create mode 100644 tests/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support/Makefile create mode 100644 tests/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support/PURPOSE create mode 100644 tests/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support/main.fmf create mode 100755 tests/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support/runtest.sh diff --git a/tests/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support/Makefile b/tests/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support/Makefile new file mode 100644 index 0000000..dc867e7 --- /dev/null +++ b/tests/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support/Makefile @@ -0,0 +1,64 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /tools/ltrace/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support +# Description: Test for BZ#1449588 (Can ltrace be built with backtrace support?) +# Author: Edjunior Machado +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2018 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/tools/ltrace/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Edjunior Machado " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test for BZ#1449588 (Can ltrace be built with backtrace support?)" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: ltrace" >> $(METADATA) + @echo "Requires: ltrace" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2+" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Bug: 1449588" >> $(METADATA) + @echo "Releases: -RHEL4 -RHELClient5 -RHELServer5" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support/PURPOSE b/tests/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support/PURPOSE new file mode 100644 index 0000000..6da4e88 --- /dev/null +++ b/tests/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support/PURPOSE @@ -0,0 +1,5 @@ +PURPOSE of /tools/ltrace/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support +Description: Test for BZ#1449588 (Can ltrace be built with backtrace support?) +Author: Edjunior Machado +Bug summary: Can ltrace be built with backtrace support? +Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1449588 diff --git a/tests/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support/main.fmf b/tests/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support/main.fmf new file mode 100644 index 0000000..91de65d --- /dev/null +++ b/tests/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support/main.fmf @@ -0,0 +1,16 @@ +summary: Test for BZ#1449588 (Can ltrace be built with backtrace support?) +description: | + Bug summary: Can ltrace be built with backtrace support? + Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1449588 +contact: Edjunior Machado +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +duration: 5m +link: +- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1449588 +extra-summary: /tools/ltrace/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support +extra-task: /tools/ltrace/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support diff --git a/tests/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support/runtest.sh b/tests/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support/runtest.sh new file mode 100755 index 0000000..829db70 --- /dev/null +++ b/tests/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support/runtest.sh @@ -0,0 +1,53 @@ +#!/bin/bash +# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/ltrace/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support +# Description: Test for BZ#1449588 (Can ltrace be built with backtrace support?) +# Author: Edjunior Machado +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2018 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +CMD="ltrace" +PACKAGE=$(rpm -qf $(which $CMD)) + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "pushd $TmpDir" + rlPhaseEnd + + rlPhaseStartTest + set -o pipefail + rlRun -l "ltrace --help |& tee help-output.log" 0 "Collecting help output" + rlRun -l "grep -- '-w, --where=NR.*print backtrace showing NR stack frames at most.' help-output.log" 0 "Checking if '-w, --where=NR' parameter is available on help output" + rlRun -l "ltrace -w 4 /bin/ls" 0 "Trivial smoke test" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd From 0554fda54f6173ec4244e8ffd2259039374161b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Fri, 9 Jul 2021 16:24:48 +0200 Subject: [PATCH 41/64] Import RHEL's test Sanity/random-apps Note than several sub-tests (apps) had to be removed as unsuitable for publishing. --- tests/Sanity/random-apps/Makefile | 64 ++++++ tests/Sanity/random-apps/PURPOSE | 3 + tests/Sanity/random-apps/abort.c | 6 + tests/Sanity/random-apps/main.fmf | 14 ++ .../Sanity/random-apps/many_looping_threads.c | 35 +++ tests/Sanity/random-apps/mthd2.c | 43 ++++ tests/Sanity/random-apps/reproducer.c | 14 ++ tests/Sanity/random-apps/reproducer2.c | 15 ++ tests/Sanity/random-apps/reproducer3.c | 14 ++ tests/Sanity/random-apps/runtest.sh | 101 +++++++++ tests/Sanity/random-apps/say_linux.c | 8 + tests/Sanity/random-apps/sleeping-c.c | 6 + tests/Sanity/random-apps/t_thread.c | 211 ++++++++++++++++++ tests/Sanity/random-apps/test1.c | 52 +++++ tests/Sanity/random-apps/test_fork.c | 78 +++++++ tests/Sanity/random-apps/test_select.c | 70 ++++++ tests/Sanity/random-apps/thread-test2.c | 34 +++ tests/Sanity/random-apps/vfork.c | 15 ++ 18 files changed, 783 insertions(+) create mode 100644 tests/Sanity/random-apps/Makefile create mode 100644 tests/Sanity/random-apps/PURPOSE create mode 100644 tests/Sanity/random-apps/abort.c create mode 100644 tests/Sanity/random-apps/main.fmf create mode 100644 tests/Sanity/random-apps/many_looping_threads.c create mode 100644 tests/Sanity/random-apps/mthd2.c create mode 100644 tests/Sanity/random-apps/reproducer.c create mode 100644 tests/Sanity/random-apps/reproducer2.c create mode 100644 tests/Sanity/random-apps/reproducer3.c create mode 100755 tests/Sanity/random-apps/runtest.sh create mode 100644 tests/Sanity/random-apps/say_linux.c create mode 100644 tests/Sanity/random-apps/sleeping-c.c create mode 100644 tests/Sanity/random-apps/t_thread.c create mode 100644 tests/Sanity/random-apps/test1.c create mode 100644 tests/Sanity/random-apps/test_fork.c create mode 100644 tests/Sanity/random-apps/test_select.c create mode 100644 tests/Sanity/random-apps/thread-test2.c create mode 100644 tests/Sanity/random-apps/vfork.c diff --git a/tests/Sanity/random-apps/Makefile b/tests/Sanity/random-apps/Makefile new file mode 100644 index 0000000..cc7d4a8 --- /dev/null +++ b/tests/Sanity/random-apps/Makefile @@ -0,0 +1,64 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /tools/ltrace/Sanity/random-apps +# Description: Runs random app which caused strace problems in the past +# Author: Michal Nowak +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2011 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/tools/ltrace/Sanity/random-apps +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE *.c + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Michal Nowak " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Runs random app which caused strace problems in the past" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 1h" >> $(METADATA) + @echo "RunFor: ltrace" >> $(METADATA) + @echo "Requires: ltrace" >> $(METADATA) + @echo "Requires: gcc glibc-devel" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: yes" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Sanity/random-apps/PURPOSE b/tests/Sanity/random-apps/PURPOSE new file mode 100644 index 0000000..49e48ae --- /dev/null +++ b/tests/Sanity/random-apps/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /tools/ltrace/Sanity/random-apps +Description: Runs random app which caused strace problems in the past +Author: Michal Nowak diff --git a/tests/Sanity/random-apps/abort.c b/tests/Sanity/random-apps/abort.c new file mode 100644 index 0000000..b1db3c3 --- /dev/null +++ b/tests/Sanity/random-apps/abort.c @@ -0,0 +1,6 @@ +#include + +int main() { + abort(); +} + diff --git a/tests/Sanity/random-apps/main.fmf b/tests/Sanity/random-apps/main.fmf new file mode 100644 index 0000000..65d54ee --- /dev/null +++ b/tests/Sanity/random-apps/main.fmf @@ -0,0 +1,14 @@ +summary: Runs random app which caused strace problems in the past +description: '' +contact: Michal Nowak +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +- gcc +- glibc-devel +duration: 1h +extra-summary: /tools/ltrace/Sanity/random-apps +extra-task: /tools/ltrace/Sanity/random-apps diff --git a/tests/Sanity/random-apps/many_looping_threads.c b/tests/Sanity/random-apps/many_looping_threads.c new file mode 100644 index 0000000..87d837b --- /dev/null +++ b/tests/Sanity/random-apps/many_looping_threads.c @@ -0,0 +1,35 @@ +#include +#include +#include +#include +#include +#include + +static int thd_no; + +static void *sub_thd(void *c) +{ + fprintf(stderr, "sub-thread %d created\n", ++thd_no); + for (;;) + getuid(); + return NULL; +} + +int main(int argc, char *argv[]) +{ + int i; + pthread_t *thd; + int num_threads = 1; + + if (argv[1]) + num_threads = atoi(argv[1]); + + thd = malloc(num_threads * sizeof(thd[0])); + fprintf(stderr, "test start, num_threads:%d...\n", num_threads); + for (i = 0; i < num_threads; i++) { + pthread_create(&thd[i], NULL, sub_thd, NULL); + fprintf(stderr, "after pthread_create\n"); + } + /* Exit. This kills all threads */ + return 0; +} diff --git a/tests/Sanity/random-apps/mthd2.c b/tests/Sanity/random-apps/mthd2.c new file mode 100644 index 0000000..6c0f154 --- /dev/null +++ b/tests/Sanity/random-apps/mthd2.c @@ -0,0 +1,43 @@ +#include +#include +#include +#include +#include + +#define NTHD 60 + +int thd_no; + + +long sub_func(void) +{ + uid_t uid; + + printf("sub-thread created: %d\n", ++thd_no); + + for (;;) { + uid = getuid(); + sleep(1); + } + + return (long)uid; +} + +void *sub_thd(void *c) +{ + sub_func(); +} + +main(int argc, char *argv[]) +{ + int i; + pthread_t thd[NTHD]; + + printf("test start...\n"); + + for (i = 0; i < NTHD; i++) { + pthread_create(&thd[i], NULL, sub_thd, NULL); + } +// pause(); +} + diff --git a/tests/Sanity/random-apps/reproducer.c b/tests/Sanity/random-apps/reproducer.c new file mode 100644 index 0000000..cca818c --- /dev/null +++ b/tests/Sanity/random-apps/reproducer.c @@ -0,0 +1,14 @@ +#include + +void *start (void *arg) { + return arg; +} + +pthread_t thread1; + +int main () { + pthread_create (&thread1, NULL, start, NULL); + sleep (1); + return 0; +} + diff --git a/tests/Sanity/random-apps/reproducer2.c b/tests/Sanity/random-apps/reproducer2.c new file mode 100644 index 0000000..404e8d6 --- /dev/null +++ b/tests/Sanity/random-apps/reproducer2.c @@ -0,0 +1,15 @@ +#include +#include + +static void h(int sig) {} + +int main() +{ + struct sigaction sa; + sigemptyset(&sa.sa_mask); + sa.sa_handler = h; + sa.sa_flags = SA_RESETHAND | SA_NODEFER; + sigaction (SIGUSR1, &sa, NULL); + return 0; +} + diff --git a/tests/Sanity/random-apps/reproducer3.c b/tests/Sanity/random-apps/reproducer3.c new file mode 100644 index 0000000..cca818c --- /dev/null +++ b/tests/Sanity/random-apps/reproducer3.c @@ -0,0 +1,14 @@ +#include + +void *start (void *arg) { + return arg; +} + +pthread_t thread1; + +int main () { + pthread_create (&thread1, NULL, start, NULL); + sleep (1); + return 0; +} + diff --git a/tests/Sanity/random-apps/runtest.sh b/tests/Sanity/random-apps/runtest.sh new file mode 100755 index 0000000..99e7612 --- /dev/null +++ b/tests/Sanity/random-apps/runtest.sh @@ -0,0 +1,101 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/ltrace/Sanity/random-apps +# Description: Runs random app which caused strace problems in the past +# Author: Michal Nowak +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2011 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +CMD='ltrace' +BIN=$(which --skip-alias $CMD) +PACKAGE="$(rpm -qf --qf='%{name}\n' $BIN)" +#export MALLOC_PERTURB_=$(($RANDOM % 255 + 1)) + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "TmpDir=\`mktemp -d\`" 0 "Creating tmp directory" + cp *.c $TmpDir + rlRun "pushd $TmpDir" + rlPhaseEnd + + touch FAILED PASSED + PASSED_CNT=0 + FAILED_CNT=0 + ALL_CNT=0 + for test in *.c; do + RESULT="PASS" + rlPhaseStartTest "Test ${test}" + rlRun "gcc $test -o ${test}.bin -lpthread" 0 "Compile $test" + rlAssertExists "${test}.bin" + rlRun "ltrace -o ${test}.LOG -f ./${test}.bin" 0 "Run $test under ltrace" + [ $? -ne 0 ] && RESULT=FAIL + + echo + cat ${test}.LOG + echo + + rlAssertNotGrep "\-\-\- SIGKILL" ${test}.LOG + [ $? -ne 0 ] && RESULT=FAIL + rlAssertNotGrep "\-\-\- SIGSEGV" ${test}.LOG + [ $? -ne 0 ] && RESULT=FAIL + rlAssertNotGrep "\-\-\- SIGILL" ${test}.LOG + [ $? -ne 0 ] && RESULT=FAIL + rlAssertNotGrep "\-\-\- SIGTRAP" ${test}.LOG + [ $? -ne 0 ] && RESULT=FAIL + rlAssertNotGrep "\-\-\- SIGINT" ${test}.LOG + [ $? -ne 0 ] && RESULT=FAIL + if [[ "$RESULT" == "PASS" ]]; then + let "PASSED_CNT = $PASSED_CNT + 1" + echo "$test $opt" >> PASSED + else + let "FAILED_CNT = $FAILED_CNT + 1" + echo "$test $opt" >> FAILED + fi + let "ALL_CNT = $ALL_CNT + 1" + rlPhaseEnd + done + + rlPhaseStartTest + rlLog "PASSED : $PASSED_CNT of $ALL_CNT" + cat PASSED + rlLog "FAILED : $FAILED_CNT of $ALL_CNT" + cat FAILED + if [ $FAILED_CNT -eq 0 ]; then + rlPass "All testcases passed." + else + rlFail "There are some errors." + fi + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "tar c *.LOG *.bin PASSED FAILED | gzip > logs.tar.gz" + rlFileSubmit "logs.tar.gz" + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd diff --git a/tests/Sanity/random-apps/say_linux.c b/tests/Sanity/random-apps/say_linux.c new file mode 100644 index 0000000..79f2d61 --- /dev/null +++ b/tests/Sanity/random-apps/say_linux.c @@ -0,0 +1,8 @@ +#include +#include + +int main() { + printf("Linux\n"); + exit(0); +} + diff --git a/tests/Sanity/random-apps/sleeping-c.c b/tests/Sanity/random-apps/sleeping-c.c new file mode 100644 index 0000000..4739a56 --- /dev/null +++ b/tests/Sanity/random-apps/sleeping-c.c @@ -0,0 +1,6 @@ +#include + +int main() +{ + sleep (15); +} diff --git a/tests/Sanity/random-apps/t_thread.c b/tests/Sanity/random-apps/t_thread.c new file mode 100644 index 0000000..e1f24c3 --- /dev/null +++ b/tests/Sanity/random-apps/t_thread.c @@ -0,0 +1,211 @@ +#include +#include +#include +#include +#include +#include +#include +#include +//#include "trigger_error.h" +#define THREAD_NUM 100 +#define MALLOC_LEN 1024*1024*10 +#define DEFAULT_NUM 0 +#define MAXSEM 5 + +int fd[10000]; +int fullid; +int emptyid; +int mutxid; + +void *thread_handle_a(void *temp); + +int main(int argc, char *argv[]) +{ + pthread_t tid_a; + int i; + int ai[THREAD_NUM]; + int ret_a = -1; + int file_num; + char filename[10]; + char str[20]; + struct sembuf P, V;; + union semun arg; + pid_t pid; + + int *array; + int *sum; + int *set; + int *get; + + if (DEFAULT_NUM == 0) { + file_num = 10; + } + +#ifdef STS_SLEEP + sleep(10); +#endif + + for (i = 0; i < file_num; i++) { + sprintf(filename, "%d", i); + printf("open fd%d\n", i); + fd[i] = open(filename, O_RDONLY); + if (fd[i] < 0) + continue; + + if (read(fd[i], str, sizeof(str)) < 0) { + close(fd[i]); + fd[i] = -1; + continue; + } + printf("%s", str); + } + + for (i = 0; i < file_num; i++) { + if (fd[i] >= 0) { + close(fd[i]); + } + } + + for (i = 0; i < file_num; i++) { + fd[0] = open("/dev/null", O_RDONLY); + if (fd[0] < 0) { + perror("open /dev/null"); + continue; + } + close(fd[0]); + } + + for (i = 0; i < file_num; i++) { + fd[0] = open("/proc/meminfo", O_RDONLY); + if (fd[0] < 0) { + perror("open /proc/meminfo"); + continue; + } + if (read(fd[0], str, sizeof(str)) < 0) { + close(fd[0]); + continue; + } + printf("%s\n", str); + close(fd[0]); + } + for (i = 0; i < file_num; i++) { + fd[0] = open("/proc/self/maps", O_RDONLY); + if (fd[0] < 0) { + perror("open /proc/meminfo"); + continue; + } + if (read(fd[0], str, sizeof(str)) < 0) { + close(fd[0]); + continue; + } + printf("%s\n", str); + close(fd[0]); + } + + array = + (int *)mmap(NULL, sizeof(int) * 5, PROT_READ | PROT_WRITE, + MAP_SHARED | MAP_ANONYMOUS, -1, 0); + sum = + (int *)mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, + MAP_SHARED | MAP_ANONYMOUS, -1, 0); + get = + (int *)mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, + MAP_SHARED | MAP_ANONYMOUS, -1, 0); + set = + (int *)mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, + MAP_SHARED | MAP_ANONYMOUS, -1, 0); + *sum = 0; + *get = 0; + *set = 0; + + fullid = semget(IPC_PRIVATE, 1, IPC_CREAT | 00666); + emptyid = semget(IPC_PRIVATE, 1, IPC_CREAT | 00666); + mutxid = semget(IPC_PRIVATE, 1, IPC_CREAT | 00666); + + arg.val = 0; + if (semctl(fullid, 0, SETVAL, arg) == -1) + perror("semctl setval error"); + + arg.val = MAXSEM; + if (semctl(emptyid, 0, SETVAL, arg) == -1) + perror("semctl setval error"); + + arg.val = 1; + if (semctl(mutxid, 0, SETVAL, arg) == -1) + perror("setctl setval error"); + + V.sem_num = 0; + V.sem_op = 1; + V.sem_flg = SEM_UNDO; + P.sem_num = 0; + P.sem_op = -1; + P.sem_flg = SEM_UNDO; + + i = 0; + while (i < 5) { + + semop(emptyid, &P, 1); + semop(mutxid, &P, 1); + + array[*(set) % MAXSEM] = i + 1; + printf("Producer %d\n", array[(*set) % MAXSEM]); + (*set)++; + fflush(NULL); + semop(mutxid, &V, 1); + semop(fullid, &V, 1); + i++; + } + semctl(fullid, 0, IPC_RMID); + semctl(emptyid, 0, IPC_RMID); + semctl(mutxid, 0, IPC_RMID); + + if ((pid = fork()) == 0) { + for (i = 0; i < THREAD_NUM; i++) { + ai[i] = i; + ret_a = pthread_create(&tid_a, NULL, thread_handle_a, &ai[i]); + printf("thread a : \n"); + + if (ret_a == 0) { + pthread_detach(tid_a); + } + } + } else if (pid > 0) { + for (i = 0; i < THREAD_NUM; i++) { + ai[i] = i; + ret_a = pthread_create(&tid_a, NULL, thread_handle_a, &ai[i]); + printf("thread a : \n"); + + if (ret_a == 0) { + pthread_detach(tid_a); + } + } + } else { + printf("fork error\n"); + } + + fflush(NULL); + write(1, "BEFORE_ERROR\n", 13); + //trigger_error(); + raise(SIGFPE); + write(1, "EXIT_FLAG\n", 10); + return 10; +} + +void *thread_handle_a(void *t) +{ + long page_size = MALLOC_LEN; + int j = *(int *)t; + char *addr; + addr = (char *)malloc(page_size); + if (addr != NULL) { + sprintf(addr, "hello"); + printf("(a) malloc %d success: %s\n", j, addr); + } else { + printf("(a)malloc %d failed\n", j); + } + + printf("thread (a) will exit\n"); + fflush(NULL); + return NULL; +} + diff --git a/tests/Sanity/random-apps/test1.c b/tests/Sanity/random-apps/test1.c new file mode 100644 index 0000000..45a43af --- /dev/null +++ b/tests/Sanity/random-apps/test1.c @@ -0,0 +1,52 @@ +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + int pfd[2]; + pid_t pid = -1; + int rc = 0; + char buf[BUFSIZ]; + sigset_t sig_mask; + + /* + * Mask of SIGTRAP + * Initialize of the value of sig_mask + */ + sigemptyset(&sig_mask); + + /* Set of SIGTRAP in sig_mask */ + sigaddset(&sig_mask, SIGTRAP); + + /* Set of SIGTRAP */ + sigprocmask(SIG_SETMASK, &sig_mask, NULL); + + rc = pipe(pfd); + if(rc == -1){ + perror("pipe Error\n"); + exit (1); + } + pid = fork(); + if (pid == -1){ + perror("Fork Error\n"); + exit (1); + } else if (pid == 0) { + close(pfd[0]); + close(1); + dup(pfd[1]); + close(pfd[1]); + execl("./test2.sh", (char *)0); + exit(0); + } else { + close(pfd[1]); + while((read(pfd[0], buf, sizeof(buf))) > 0) { + printf("%s", buf); + } + close(pfd[0]); + wait(NULL); + exit(0); + } +} diff --git a/tests/Sanity/random-apps/test_fork.c b/tests/Sanity/random-apps/test_fork.c new file mode 100644 index 0000000..7afd110 --- /dev/null +++ b/tests/Sanity/random-apps/test_fork.c @@ -0,0 +1,78 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define DEFAULT_NUM 0 +#define THREAD_NUM 3 +#define MALLOC_LEN 1024*1024*10 + +void *thread_handle_a(void *t) +{ + long page_size = MALLOC_LEN; + int j = *(int *)t; + char *ptr; + char *addr; + + struct stat buf; + addr = (char *)malloc(page_size); + if (addr != NULL) { + sprintf(addr, "hello"); + printf("(a) malloc %d success: %s\n", j, addr); + } else { + printf("(a)malloc %d failed\n", j); + } + + + printf("thread (a) will exit\n"); + fflush(NULL); + if(addr != NULL) + free(addr); + return NULL; +} + +int main() +{ + int i = 0; + pid_t pid; + pthread_t tid_a; + int ai[THREAD_NUM]; + int ret_a = -1; + +#ifdef STS_SLEEP + sleep(10); +#endif + + if ((pid = fork()) == 0) { + for (i = 0; i < THREAD_NUM; i++) { + ai[i] = i; + ret_a = pthread_create(&tid_a, NULL, thread_handle_a, &ai[i]); + printf("thread a : \n"); + + if (ret_a == 0) { + pthread_detach(tid_a); + } + } + } else if (pid > 0) { + for (i = 0; i < THREAD_NUM; i++) { + ai[i] = i; + ret_a = pthread_create(&tid_a, NULL, thread_handle_a, &ai[i]); + printf("thread a : \n"); + + if (ret_a == 0) { + pthread_detach(tid_a); + } + } + + waitpid(pid, NULL, 0); + fflush(NULL); + write(1, "EXIT_FLAG\n", 10); + } else { + printf("fork error\n"); + } + return 0; +} diff --git a/tests/Sanity/random-apps/test_select.c b/tests/Sanity/random-apps/test_select.c new file mode 100644 index 0000000..f13df3b --- /dev/null +++ b/tests/Sanity/random-apps/test_select.c @@ -0,0 +1,70 @@ +#include +#include +#include +#include +#include +#include +#include + +#define MAXBUF 1024 +#define THREAD_NUM 100 +#define MALLOC_LEN 1024*1024*10 + +void *thread_handle_a(void *t) +{ + long page_size = MALLOC_LEN; + int j = *(int *)t; + char *addr; + addr = (char *)malloc(page_size); + if (addr != NULL) { + sprintf(addr, "hello"); + printf("(a) malloc %d success: %s\n", j, addr); + } else { + printf("(a)malloc %d failed\n", j); + } + + printf("thread (a) will exit\n"); + fflush(NULL); + return NULL; +} + +int main(int argc, char **argv) +{ + fd_set wfds; + struct timeval tv; + int retval, maxfd = -1; + pthread_t tid_a; + int i; + int ai[THREAD_NUM]; + int ret_a = -1; + + sleep(5); + + for (i = 0; i < THREAD_NUM; i++) { + ai[i] = i; + ret_a = pthread_create(&tid_a, NULL, thread_handle_a, &ai[i]); + printf("thread a : \n"); + + if (ret_a == 0) { + pthread_detach(tid_a); + } + } + + FD_ZERO(&wfds); + FD_SET(STDOUT_FILENO, &wfds); + maxfd = STDOUT_FILENO; + tv.tv_sec = 1; + tv.tv_usec = 0; + + retval = select(maxfd+1, NULL, &wfds, NULL, &tv); + if (retval == -1) { + fprintf(stderr, "select failed\n"); + } else if (retval == 0){ + printf("Time out\n"); + } else { + printf("stdout can be write\n"); + } + + printf("EXIT_FLAG\n"); + return 0; +} diff --git a/tests/Sanity/random-apps/thread-test2.c b/tests/Sanity/random-apps/thread-test2.c new file mode 100644 index 0000000..cce490c --- /dev/null +++ b/tests/Sanity/random-apps/thread-test2.c @@ -0,0 +1,34 @@ +#include +#include +#include +#include +#include +#include + +#define THREAD_NUM 32 + +void *thread_function (void *); + +int main (int argc, char *argv[]) +{ + int i =0, x = 0; + int res = 0; + pthread_t a_thread[THREAD_NUM]; + void *thread_result; + + for (i = 0; i < THREAD_NUM; i++) { + res = pthread_create (&a_thread[i], NULL, thread_function, (void *)0); + if (res != 0) { + printf("Thread create failed\n"); + return (10); + } + } + raise(SIGABRT); + return (0); +} + +void *thread_function (void *arg) +{ + sleep(1); + printf("Thread TEST\n"); +} diff --git a/tests/Sanity/random-apps/vfork.c b/tests/Sanity/random-apps/vfork.c new file mode 100644 index 0000000..a34e09f --- /dev/null +++ b/tests/Sanity/random-apps/vfork.c @@ -0,0 +1,15 @@ +#define _GNU_SOURCE +#include +#include + +int main (void) +{ + pid_t child = vfork (); + + /* PRINTF/SLEEP violate the VFORK operations restriction. */ + printf ("%d pid=%d\n", (int) child, (int) getpid ()); + sleep (1); + if (!child) + execlp ("/bin/true", "/bin/true", NULL); + return 0; +} From 0e4ab8cfe4ce8633a67069a72649300583a615da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Fri, 9 Jul 2021 16:36:36 +0200 Subject: [PATCH 42/64] Import RHEL's wrapper for the upstream test suite Note: In RHEL, it's "testsuite2" outside of categories, here I'm adding it to the Sanity category. Note: I've filed https://bugzilla.redhat.com/show_bug.cgi?id=1963110 and included it as a known failure to make this test pass. --- tests/Sanity/testsuite/Makefile | 71 +++++++++++++++++++++++++++ tests/Sanity/testsuite/PURPOSE | 3 ++ tests/Sanity/testsuite/main.fmf | 23 +++++++++ tests/Sanity/testsuite/runtest.sh | 79 +++++++++++++++++++++++++++++++ 4 files changed, 176 insertions(+) create mode 100644 tests/Sanity/testsuite/Makefile create mode 100644 tests/Sanity/testsuite/PURPOSE create mode 100644 tests/Sanity/testsuite/main.fmf create mode 100755 tests/Sanity/testsuite/runtest.sh diff --git a/tests/Sanity/testsuite/Makefile b/tests/Sanity/testsuite/Makefile new file mode 100644 index 0000000..fec9913 --- /dev/null +++ b/tests/Sanity/testsuite/Makefile @@ -0,0 +1,71 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /tools/ltrace/Sanity/testsuite +# Description: upstream tests for ltrace +# Author: Martin Cermak +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2015 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/tools/ltrace/Sanity/testsuite +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Martin Cermak " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: upstream tests for ltrace" >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 5h" >> $(METADATA) + @echo "RunFor: ltrace" >> $(METADATA) + @echo "Requires: ltrace" >> $(METADATA) + @echo "Requires: gcc" >> $(METADATA) + @echo "Requires: gcc-c++" >> $(METADATA) + @echo "Requires: libstdc++" >> $(METADATA) + @echo "Requires: libstdc++-devel" >> $(METADATA) + @echo "Requires: rpm-build yum-utils" >> $(METADATA) + @echo "Requires: elfutils-devel" >> $(METADATA) + @echo "Requires: dejagnu" >> $(METADATA) + @echo "Requires: libselinux-devel" >> $(METADATA) + @echo "Requires: libtool" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2+" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Sanity/testsuite/PURPOSE b/tests/Sanity/testsuite/PURPOSE new file mode 100644 index 0000000..75f0067 --- /dev/null +++ b/tests/Sanity/testsuite/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /tools/ltrace/Sanity/testsuite +Description: upstream tests for ltrace +Author: Martin Cermak diff --git a/tests/Sanity/testsuite/main.fmf b/tests/Sanity/testsuite/main.fmf new file mode 100644 index 0000000..c0c9e11 --- /dev/null +++ b/tests/Sanity/testsuite/main.fmf @@ -0,0 +1,23 @@ +summary: upstream tests for ltrace +description: '' +contact: Martin Cermak +component: +- ltrace +test: ./runtest.sh +framework: beakerlib +recommend: +- ltrace +- gcc +- gcc-c++ +- libstdc++ +- libstdc++-devel +- rpm-build +- yum-utils +- elfutils-devel +- dejagnu +- libselinux-devel +- libtool +- koji +duration: 5h +extra-summary: /tools/ltrace/Sanity/testsuite +extra-task: /tools/ltrace/Sanity/testsuite diff --git a/tests/Sanity/testsuite/runtest.sh b/tests/Sanity/testsuite/runtest.sh new file mode 100755 index 0000000..e11c162 --- /dev/null +++ b/tests/Sanity/testsuite/runtest.sh @@ -0,0 +1,79 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/ltrace/Sanity/testsuite +# Description: upstream tests for ltrace +# Author: Martin Cermak +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2015 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +CMD='ltrace' +BIN=$(which --skip-alias $CMD) +PACKAGE="${PACKAGE:-$(rpm -qf $BIN)}" +export PACKAGE + +GCC=${GCC:-gcc} +export GCC + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun -l "rpm -qf $(which $GCC)" 0 "Checking gcc rpm version" + rlRun "TMP=`mktemp -d`" + rlRun "pushd $TMP" + + rlRun "koji download-build --arch=src $PACKAGE" + rlRun "dnf builddep -y *src.rpm" + rlRun "rpm --define='_topdir $TMP' -Uvh *src.rpm" + rlRun "${RPMBUILD_GCC:+CC=$RPMBUILD_GCC} rpmbuild --define='_topdir $TMP' -bc SPECS/${CMD}.spec" + rlPhaseEnd + + rlPhaseStartTest + rlRun "pushd BUILD/${CMD}-*" + + # known issues to be ignored + ignore_list='' + rlRun "ignore_list+=' system_calls.exp'" 0 "Failure reported bz#1963110" + + # define --ignore parameter for 'make check' if there is any testcase to be ignored + [ -n "$ignore_list" ] && rlRun "ignore_param=\"--ignore '$ignore_list'\"" 0 "Ignored testcases that will not be run: $ignore_list" + + # test + set -o pipefail + rlRun "make check RUNTESTFLAGS=\"--tool_exec=$BIN CC_FOR_TARGET=$GCC $ignore_param\" |& tee $TMP/check.log" + rlRun "popd" + + # no unexpected results should appear + rlRun -l "grep '^FAIL:' check.log" 1 + rlRun -l "grep '^# of unexpected' check.log" 1 + + rlFileSubmit "$TMP/check.log" "$PACKAGE-check.log" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $TMP" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd From 809fa26deb9989363b3a127ce4d1fad03a45ab0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Fri, 24 Sep 2021 13:12:50 +0200 Subject: [PATCH 43/64] Fix the setup in tests/Sanity/testsuite "koji download-build" is a wrong tool to download artifacts being tested. They are freshly scratch-built and hosted in a local repo called "test-artifacts" unknown to koji. Using "dnf download" directly and limited to that specific repo is a correct way to reach them. I'm adding a fallback using the repo's local files just in case "dnf" suffers some temporary hiccup. --- tests/Sanity/testsuite/runtest.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/Sanity/testsuite/runtest.sh b/tests/Sanity/testsuite/runtest.sh index e11c162..7687113 100755 --- a/tests/Sanity/testsuite/runtest.sh +++ b/tests/Sanity/testsuite/runtest.sh @@ -40,12 +40,13 @@ rlJournalStart rlPhaseStartSetup rlAssertRpm $PACKAGE rlRun -l "rpm -qf $(which $GCC)" 0 "Checking gcc rpm version" + rlRun "NVR=$(rpm -q --qf='%{NAME}-%{VERSION}-%{RELEASE}' $PACKAGE)" rlRun "TMP=`mktemp -d`" rlRun "pushd $TMP" - rlRun "koji download-build --arch=src $PACKAGE" - rlRun "dnf builddep -y *src.rpm" - rlRun "rpm --define='_topdir $TMP' -Uvh *src.rpm" + rlRun "dnf download --disablerepo='*' --enablerepo=test-artifacts --source $NVR || cp /var/share/test-artifacts/$NVR.src.rpm ." + rlRun "dnf builddep -y $NVR.src.rpm" + rlRun "rpm --define='_topdir $TMP' -Uvh $NVR.src.rpm" rlRun "${RPMBUILD_GCC:+CC=$RPMBUILD_GCC} rpmbuild --define='_topdir $TMP' -bc SPECS/${CMD}.spec" rlPhaseEnd From 8fd295b7c55344a039cdb3c253e1c8b4e2e5b871 Mon Sep 17 00:00:00 2001 From: Martin Cermak Date: Thu, 11 Nov 2021 12:34:11 +0100 Subject: [PATCH 44/64] Do not try to install compat arch requirements --- .../bz868281-ltrace-doesn-t-work-on-PIE-binaries/main.fmf | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/main.fmf b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/main.fmf index a78d993..f45f827 100644 --- a/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/main.fmf +++ b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/main.fmf @@ -10,12 +10,8 @@ framework: beakerlib recommend: - ltrace - gcc -- libgcc.i686 -- glibc-devel.i686 -- libgcc.ppc64 -- glibc-devel.ppc64 -- libgcc.s390 -- glibc-devel.s390 +- libgcc +- glibc-devel duration: 5m link: - relates: https://bugzilla.redhat.com/show_bug.cgi?id=868281 From 101cd9b6c3c8e02ef3a51e53769683c895724451 Mon Sep 17 00:00:00 2001 From: Martin Cermak Date: Fri, 12 Nov 2021 09:09:08 +0100 Subject: [PATCH 45/64] CI testing: Fix the SRPM download Usually, this test is used for gating ltrace. In such case the Fedora infrastructure offers the SRPM along with other ltrace subrpms within a repo called "test-artifacts". However, this test is also used to test dejagnu, because ltrace has dejagnu based testsuite. In such case the "test-artifacts" repo has dejagnu, but not ltrace. We need to be able to get the ltrace SRPM in both cases. --- tests/Sanity/testsuite/runtest.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/Sanity/testsuite/runtest.sh b/tests/Sanity/testsuite/runtest.sh index 7687113..d3b2e4a 100755 --- a/tests/Sanity/testsuite/runtest.sh +++ b/tests/Sanity/testsuite/runtest.sh @@ -44,7 +44,12 @@ rlJournalStart rlRun "TMP=`mktemp -d`" rlRun "pushd $TMP" - rlRun "dnf download --disablerepo='*' --enablerepo=test-artifacts --source $NVR || cp /var/share/test-artifacts/$NVR.src.rpm ." + set -x + dnf download --disablerepo='*' --enablerepo=test-artifacts --source $NVR || \ + cp /var/share/test-artifacts/$NVR.src.rpm . || \ + rlFetchSrcForInstalled ltrace + set +x + rlRun "dnf builddep -y $NVR.src.rpm" rlRun "rpm --define='_topdir $TMP' -Uvh $NVR.src.rpm" rlRun "${RPMBUILD_GCC:+CC=$RPMBUILD_GCC} rpmbuild --define='_topdir $TMP' -bc SPECS/${CMD}.spec" From 464fde80d5f517254f636da3d73d8f535feeddb2 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 20 Jan 2022 18:10:39 +0000 Subject: [PATCH 46/64] - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- ltrace.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index 67a4ff8..d27d700 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 42%{?dist} +Release: 43%{?dist} # In coordination with Juan Céspedes, upstream is now officially on gitlab. # We are going to being sending all of our Fedora patches upstream to gitlab. URL: https://gitlab.com/cespedes/ltrace @@ -207,6 +207,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Thu Jan 20 2022 Fedora Release Engineering - 0.7.91-43 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + * Thu Jul 22 2021 Fedora Release Engineering - 0.7.91-42 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild From 8b45d8ed688aa9bdda4ba53f84931a6d2550d6ea Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Thu, 27 Jan 2022 23:12:51 -0500 Subject: [PATCH 47/64] Fix use-after-free in ppc64le's plt.c Found by gcc 12 Resolves: #2046722 --- ltrace-0.7.91-W-use-after-free.patch | 13 +++++++++++++ ltrace.spec | 8 +++++++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 ltrace-0.7.91-W-use-after-free.patch diff --git a/ltrace-0.7.91-W-use-after-free.patch b/ltrace-0.7.91-W-use-after-free.patch new file mode 100644 index 0000000..19e802f --- /dev/null +++ b/ltrace-0.7.91-W-use-after-free.patch @@ -0,0 +1,13 @@ +diff -rup a/sysdeps/linux-gnu/ppc/plt.c b/sysdeps/linux-gnu/ppc/plt.c +--- a/sysdeps/linux-gnu/ppc/plt.c 2022-01-27 20:40:52.956980433 -0500 ++++ b/sysdeps/linux-gnu/ppc/plt.c 2022-01-27 20:41:37.031599771 -0500 +@@ -687,8 +687,8 @@ arch_elf_add_func_entry(struct process * + if (libsym == NULL + || library_symbol_init(libsym, addr, full_name, 1, + LS_TOPLT_NONE) < 0) { +- free(libsym); + delete_symbol_chain(libsym); ++ free(libsym); + libsym = NULL; + fprintf(stderr, "Couldn't add symbol %s" + "for tracing.\n", name); diff --git a/ltrace.spec b/ltrace.spec index d27d700..b14e9f5 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 43%{?dist} +Release: 44%{?dist} # In coordination with Juan Céspedes, upstream is now officially on gitlab. # We are going to being sending all of our Fedora patches upstream to gitlab. URL: https://gitlab.com/cespedes/ltrace @@ -132,6 +132,8 @@ Patch35: ltrace-0.7.91-rh1799619.patch # Support for both SC and SCV sycall insns Patch36: ltrace-0.7.91-ppc64le-scv.patch +Patch37: ltrace-0.7.91-W-use-after-free.patch + %description Ltrace is a debugging program which runs a specified command until the command exits. While the command is executing, ltrace intercepts and @@ -180,6 +182,7 @@ execution of processes. %patch34 -p1 %patch35 -p1 %patch36 -p1 +%patch37 -p1 %build autoreconf -i @@ -207,6 +210,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Thu Jan 27 2022 DJ Delorie - 0.7.91-44 +- Fix use-after-free cases. + * Thu Jan 20 2022 Fedora Release Engineering - 0.7.91-43 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild From 16ad28b25972766f3e97b196c2193dfa22efb829 Mon Sep 17 00:00:00 2001 From: Carlos O'Donell Date: Tue, 3 May 2022 10:03:37 -0400 Subject: [PATCH 48/64] Rebuild ltrace for rawhide (#2046722) Resolves: #2046722 --- ltrace.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index b14e9f5..92e9d4f 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 44%{?dist} +Release: 45%{?dist} # In coordination with Juan Céspedes, upstream is now officially on gitlab. # We are going to being sending all of our Fedora patches upstream to gitlab. URL: https://gitlab.com/cespedes/ltrace @@ -210,6 +210,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Fri May 03 2022 Carlos O'Donell - 0.7.91-45 +- Rebuild ltrace for rawhide (#2046722) + * Thu Jan 27 2022 DJ Delorie - 0.7.91-44 - Fix use-after-free cases. From dcc12472127d4e2398fe875763c991abf34dbc16 Mon Sep 17 00:00:00 2001 From: Jesus Checa Hidalgo Date: Wed, 23 Feb 2022 11:49:37 +0100 Subject: [PATCH 49/64] tests: fixes for gating tests * plans/ci: setting "how: beakerlib" in execute step is deprecated. changed to "how: tmt" to comply with newer tmt versions. tmt versions. * ltrace with both --o and --c does not produce output to file: add malloc to the list of syscalls to check for tracing. * ltrace crashes when run on certain processes with --S option: make pgrep to exact match to avoid getting two PIDs, one from dbus-broker and other from dbus-broker-launch. * ltrace doesn't work on PIE-binaries: Added missing 32-bit dependencies. --- plans/ci.fmf | 2 +- .../runtest.sh | 13 ++++++++++--- .../runtest.sh | 2 +- .../main.fmf | 2 ++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/plans/ci.fmf b/plans/ci.fmf index 1ad2c12..85710d6 100644 --- a/plans/ci.fmf +++ b/plans/ci.fmf @@ -3,4 +3,4 @@ discover: how: fmf directory: tests execute: - how: beakerlib + how: tmt diff --git a/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/runtest.sh b/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/runtest.sh index 77fbfef..bb5c85a 100755 --- a/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/runtest.sh +++ b/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/runtest.sh @@ -67,15 +67,22 @@ rlJournalStart fi # ltrace no longer reports __libc_start_main on rhel-8 x86_64 (rhbz#1654734) - if grep "ioctl" ltrace-test-sys.log; then + # search for either malloc or ioctl. + func_found=0 + for traced_func in "malloc" "ioctl"; do + if grep "$traced_func" ltrace-test-sys.log; then + func_found=1 + fi + done + if [ $func_found -ne 0 ]; then if [ $skip_system_binary_test ]; then rlLogWarning "Test was skipped but it seems ok. Review skip check." fi else if [ $skip_system_binary_test ]; then - rlLogInfo "ltrace output does not contain ioctl calls (expected failure)" + rlLogInfo "ltrace output does not contain ioctl or malloc calls (expected failure)" else - rlFail "ltrace output does not contain ioctl calls" + rlFail "ltrace output does not contain ioctl or malloc calls" fi fi diff --git a/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/runtest.sh b/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/runtest.sh index 1ae4c93..1434c47 100755 --- a/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/runtest.sh +++ b/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/runtest.sh @@ -46,7 +46,7 @@ fi rlJournalStart rlPhaseStartSetup rlAssertRpm $PACKAGE - rlRun "pgrep $PROC_NAME || service $SERVICE_NAME start" 0 "Checking/starting $SERVICE_NAME" + rlRun "pgrep -x $PROC_NAME || service $SERVICE_NAME start" 0 "Checking/starting $SERVICE_NAME" rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" rlRun "pushd $TmpDir" rlPhaseEnd diff --git a/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/main.fmf b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/main.fmf index f45f827..bcce809 100644 --- a/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/main.fmf +++ b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/main.fmf @@ -12,6 +12,8 @@ recommend: - gcc - libgcc - glibc-devel +- libgcc.i686 +- glibc-devel.i686 duration: 5m link: - relates: https://bugzilla.redhat.com/show_bug.cgi?id=868281 From 00f430ccbebdbd13bdd4d7ee6303b091cf005542 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 21 Jul 2022 19:58:28 +0000 Subject: [PATCH 50/64] Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- ltrace.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index 92e9d4f..6d308e2 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 45%{?dist} +Release: 46%{?dist} # In coordination with Juan Céspedes, upstream is now officially on gitlab. # We are going to being sending all of our Fedora patches upstream to gitlab. URL: https://gitlab.com/cespedes/ltrace @@ -210,6 +210,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Thu Jul 21 2022 Fedora Release Engineering - 0.7.91-46 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + * Fri May 03 2022 Carlos O'Donell - 0.7.91-45 - Rebuild ltrace for rawhide (#2046722) From 3abe3265ff07259553d32fa04a65ef3c12b54c25 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 19 Jan 2023 18:23:03 +0000 Subject: [PATCH 51/64] Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- ltrace.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index 6d308e2..7c82041 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 46%{?dist} +Release: 47%{?dist} # In coordination with Juan Céspedes, upstream is now officially on gitlab. # We are going to being sending all of our Fedora patches upstream to gitlab. URL: https://gitlab.com/cespedes/ltrace @@ -210,6 +210,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Thu Jan 19 2023 Fedora Release Engineering - 0.7.91-47 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + * Thu Jul 21 2022 Fedora Release Engineering - 0.7.91-46 - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild From cbc633d2a20d8b19bec13d89ae7921326b665266 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 20 Jul 2023 13:08:56 +0000 Subject: [PATCH 52/64] Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- ltrace.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index 7c82041..9540ad3 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 47%{?dist} +Release: 48%{?dist} # In coordination with Juan Céspedes, upstream is now officially on gitlab. # We are going to being sending all of our Fedora patches upstream to gitlab. URL: https://gitlab.com/cespedes/ltrace @@ -210,6 +210,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Thu Jul 20 2023 Fedora Release Engineering - 0.7.91-48 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + * Thu Jan 19 2023 Fedora Release Engineering - 0.7.91-47 - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild From 15ef50aff44f576100f0bf639082559dec8e7d74 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sun, 21 Jan 2024 06:18:29 +0000 Subject: [PATCH 53/64] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild --- ltrace.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index 9540ad3..4cc9e6e 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 48%{?dist} +Release: 49%{?dist} # In coordination with Juan Céspedes, upstream is now officially on gitlab. # We are going to being sending all of our Fedora patches upstream to gitlab. URL: https://gitlab.com/cespedes/ltrace @@ -210,6 +210,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Sun Jan 21 2024 Fedora Release Engineering - 0.7.91-49 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + * Thu Jul 20 2023 Fedora Release Engineering - 0.7.91-48 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild From a77340edfd6fd37e5a645c19ea65f6fdf65d6a88 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 25 Jan 2024 04:54:45 +0000 Subject: [PATCH 54/64] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild --- ltrace.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index 4cc9e6e..83a8cc2 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 49%{?dist} +Release: 50%{?dist} # In coordination with Juan Céspedes, upstream is now officially on gitlab. # We are going to being sending all of our Fedora patches upstream to gitlab. URL: https://gitlab.com/cespedes/ltrace @@ -210,6 +210,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Thu Jan 25 2024 Fedora Release Engineering - 0.7.91-50 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + * Sun Jan 21 2024 Fedora Release Engineering - 0.7.91-49 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild From 4773a704b6740f9fb1b2e3a6230943f785089832 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Such=C3=BD?= Date: Tue, 13 Feb 2024 09:30:05 +0000 Subject: [PATCH 55/64] Migrate to SPDX license This is a part of https://fedoraproject.org/wiki/Changes/SPDX_Licenses_Phase_3 --- ltrace.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index 83a8cc2..3751071 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -5,7 +5,7 @@ Release: 50%{?dist} # In coordination with Juan Céspedes, upstream is now officially on gitlab. # We are going to being sending all of our Fedora patches upstream to gitlab. URL: https://gitlab.com/cespedes/ltrace -License: GPLv2+ +License: GPL-2.0-or-later BuildRequires: elfutils-devel dejagnu BuildRequires: libselinux-devel From 6444af4152054d2f4048b89e912027a0121e03ad Mon Sep 17 00:00:00 2001 From: Software Management Team Date: Thu, 30 May 2024 12:46:47 +0200 Subject: [PATCH 56/64] Eliminate use of obsolete %patchN syntax (#2283636) --- ltrace.spec | 74 ++++++++++++++++++++++++++--------------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/ltrace.spec b/ltrace.spec index 3751071..fae9c6f 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -146,43 +146,43 @@ execution of processes. %prep %setup -q -n %{name}-%{version} -%patch0 -p1 -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 -%patch13 -p1 -%patch14 -p1 -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 -%patch18 -p1 -%patch19 -p1 -%patch20 -p1 -%patch21 -p1 -%patch22 -p1 -%patch23 -p1 -%patch24 -p1 -%patch25 -p1 -%patch26 -p1 -%patch27 -p1 -%patch28 -p1 -%patch29 -p1 -%patch30 -p1 -%patch31 -p1 -%patch32 -p1 -%patch33 -p1 -%patch34 -p1 -%patch35 -p1 -%patch36 -p1 -%patch37 -p1 +%patch -P0 -p1 +%patch -P1 -p1 +%patch -P2 -p1 +%patch -P3 -p1 +%patch -P4 -p1 +%patch -P5 -p1 +%patch -P6 -p1 +%patch -P7 -p1 +%patch -P8 -p1 +%patch -P9 -p1 +%patch -P10 -p1 +%patch -P11 -p1 +%patch -P13 -p1 +%patch -P14 -p1 +%patch -P15 -p1 +%patch -P16 -p1 +%patch -P17 -p1 +%patch -P18 -p1 +%patch -P19 -p1 +%patch -P20 -p1 +%patch -P21 -p1 +%patch -P22 -p1 +%patch -P23 -p1 +%patch -P24 -p1 +%patch -P25 -p1 +%patch -P26 -p1 +%patch -P27 -p1 +%patch -P28 -p1 +%patch -P29 -p1 +%patch -P30 -p1 +%patch -P31 -p1 +%patch -P32 -p1 +%patch -P33 -p1 +%patch -P34 -p1 +%patch -P35 -p1 +%patch -P36 -p1 +%patch -P37 -p1 %build autoreconf -i From 941e708eb6996913807027f6f37eb89f108d5a60 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 18 Jul 2024 16:05:46 +0000 Subject: [PATCH 57/64] Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild --- ltrace.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index fae9c6f..50baa0b 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 50%{?dist} +Release: 51%{?dist} # In coordination with Juan Céspedes, upstream is now officially on gitlab. # We are going to being sending all of our Fedora patches upstream to gitlab. URL: https://gitlab.com/cespedes/ltrace @@ -210,6 +210,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Thu Jul 18 2024 Fedora Release Engineering - 0.7.91-51 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + * Thu Jan 25 2024 Fedora Release Engineering - 0.7.91-50 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild From d70730248fcd8d00fc29924415dab5bf3dc541bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?= Date: Wed, 18 Sep 2024 14:16:14 +0200 Subject: [PATCH 58/64] Fix gating tests on Rawhide --- tests/Sanity/testsuite/runtest.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/Sanity/testsuite/runtest.sh b/tests/Sanity/testsuite/runtest.sh index d3b2e4a..3f56a91 100755 --- a/tests/Sanity/testsuite/runtest.sh +++ b/tests/Sanity/testsuite/runtest.sh @@ -53,10 +53,16 @@ rlJournalStart rlRun "dnf builddep -y $NVR.src.rpm" rlRun "rpm --define='_topdir $TMP' -Uvh $NVR.src.rpm" rlRun "${RPMBUILD_GCC:+CC=$RPMBUILD_GCC} rpmbuild --define='_topdir $TMP' -bc SPECS/${CMD}.spec" + + MAKEFILE_PATH=$(ls BUILD/${CMD}-*/Makefile 2>/dev/null) + if [[ -z "$MAKEFILE_PATH" ]]; then + MAKEFILE_PATH=$(ls BUILD/${CMD}-*/${CMD}-*/Makefile 2>/dev/null) + fi + rlLogInfo "MAKEFILE_PATH=$MAKEFILE_PATH" rlPhaseEnd rlPhaseStartTest - rlRun "pushd BUILD/${CMD}-*" + rlRun "pushd ${MAKEFILE_PATH%/Makefile}" # known issues to be ignored ignore_list='' From 665a435b81ba15ce0824e1fe16a744e667c4d831 Mon Sep 17 00:00:00 2001 From: Martin Coufal Date: Mon, 11 Nov 2024 12:48:52 +0100 Subject: [PATCH 59/64] tests: fix for rhel10 We use tests in Fedora for RHEL testing as well and some of the tests need to be updated to compile and run successfully on RHEL-10. * tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option: add missing includes, add NULL arg to wait() * tests/Regression/211163-ltrace-with--c-omit-execl-call: fix IF condition to include rhel-10 * tests/Regression/427444-ltrace-crashes-process-to-be-analysed: add missing include * tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file: moved reproducer to a separate file, add missing include, fix IF condition to include rhel-10 * tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots: add missing include * tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option: fix IF condition to include rhel-10 * tests/Sanity/random-apps: add return type and return to main function, add missing includes, add semun union definition --- .../reproducer.c | 4 +++- .../211163-ltrace-with--c-omit-execl-call/runtest.sh | 4 ++-- .../reproducer.c | 1 + .../Makefile | 2 +- .../reproducer.c | 7 +++++++ .../runtest.sh | 7 ++++--- .../runtest.sh | 1 + .../runtest.sh | 2 +- tests/Sanity/random-apps/mthd2.c | 3 ++- tests/Sanity/random-apps/reproducer.c | 1 + tests/Sanity/random-apps/reproducer3.c | 1 + tests/Sanity/random-apps/t_thread.c | 11 ++++++++++- tests/Sanity/random-apps/test_select.c | 1 + 13 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/reproducer.c diff --git a/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/reproducer.c b/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/reproducer.c index 1d11ad6..f06a96b 100644 --- a/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/reproducer.c +++ b/tests/Regression/211135-ltrace-hangs-while-tracing-child-process-with--f-option/reproducer.c @@ -8,6 +8,8 @@ #include #include +#include +#include void child() { printf("Fork Child\n"); @@ -24,7 +26,7 @@ int main() { child(); else { printf("My child pid is %d\n",pid); - wait(); + wait(NULL); } return 0; } diff --git a/tests/Regression/211163-ltrace-with--c-omit-execl-call/runtest.sh b/tests/Regression/211163-ltrace-with--c-omit-execl-call/runtest.sh index 68b0814..a4de38c 100755 --- a/tests/Regression/211163-ltrace-with--c-omit-execl-call/runtest.sh +++ b/tests/Regression/211163-ltrace-with--c-omit-execl-call/runtest.sh @@ -55,8 +55,8 @@ rlJournalStart fi ;; esac - elif rlIsRHEL 9 && [[ $PACKAGE =~ ^ltrace ]] && [ "$(arch)" = "ppc64le" ]; then - rlLogWarning "RHEL-9 ltrace fails to trace system binaries on ppc64le due to bz#1906881, hence skipping failure checking" + elif rlIsRHEL ">=9" && [[ $PACKAGE =~ ^ltrace ]] && [ "$(arch)" = "ppc64le" ]; then + rlLogWarning "RHEL >=9 ltrace fails to trace system binaries on ppc64le due to bz#1906881, hence skipping failure checking" skip_test=1 elif rlIsFedora 33 && [ "$(arch)" = "ppc64le" ]; then rlLogWarning "FC33 ltrace fails to trace system binaries on ppc64le due to bz#1902770, hence skipping failure checking" diff --git a/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/reproducer.c b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/reproducer.c index d0ccb5d..3118c8e 100644 --- a/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/reproducer.c +++ b/tests/Regression/427444-ltrace-crashes-process-to-be-analysed/reproducer.c @@ -3,6 +3,7 @@ #include #include #include +#include #ifndef NI_MAXHOST diff --git a/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/Makefile b/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/Makefile index 4b68558..49c119a 100644 --- a/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/Makefile +++ b/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/Makefile @@ -25,7 +25,7 @@ export TESTVERSION=1.0 BUILT_FILES= -FILES=$(METADATA) runtest.sh Makefile PURPOSE +FILES=$(METADATA) runtest.sh Makefile PURPOSE reproducer.c .PHONY: all install download clean diff --git a/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/reproducer.c b/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/reproducer.c new file mode 100644 index 0000000..5107daa --- /dev/null +++ b/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/reproducer.c @@ -0,0 +1,7 @@ +#include + +int main() +{ + alarm(42); + return 0; +} diff --git a/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/runtest.sh b/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/runtest.sh index bb5c85a..9e6c769 100755 --- a/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/runtest.sh +++ b/tests/Regression/447404-ltrace-with-both--o-and--c-options-does-not-produce-output-to-file/runtest.sh @@ -28,11 +28,12 @@ rlJournalStart rlAssertRpm $(rpm -qf $(which gcc)) rlShowRunningKernel rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "cp reproducer.c $TmpDir" rlRun "pushd $TmpDir" rlPhaseEnd rlPhaseStartTest "ltrace with -o and -c options tracing testing binary" - rlRun "echo 'int main(){alarm(42);return 0;}'| gcc -x c -o test.bin -" + rlRun "gcc -x c -o test.bin reproducer.c" rlRun "ltrace -o ltrace-test.log -c ./test.bin" 0 "ltrace is crunching a testing binary" rlRun -l "cat ltrace-test.log" rlAssertGrep "alarm" ltrace-test.log @@ -58,8 +59,8 @@ rlJournalStart fi ;; esac - elif rlIsRHEL 9 && [[ $PACKAGE =~ ^ltrace ]] && [ "$(arch)" = "ppc64le" ]; then - rlLogWarning "RHEL-9 ltrace fails to trace system binaries on ppc64le due to bz#1906881, hence skipping failure checking" + elif rlIsRHEL ">=9" && [[ $PACKAGE =~ ^ltrace ]] && [ "$(arch)" = "ppc64le" ]; then + rlLogWarning "RHEL >=9 ltrace fails to trace system binaries on ppc64le due to bz#1906881, hence skipping failure checking" skip_system_binary_test=1 elif rlIsFedora 33 && [ "$(arch)" = "ppc64le" ]; then rlLogWarning "FC33 ltrace fails to trace system binaries on ppc64le due to bz#1902770, hence skipping failure checking" diff --git a/tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/runtest.sh b/tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/runtest.sh index 9758773..2dd3bb1 100755 --- a/tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/runtest.sh +++ b/tests/Regression/bz1158713-ltrace-assigns-wrong-names-to-glibc-PLT-slots/runtest.sh @@ -42,6 +42,7 @@ rlJournalStart #include #include #include +#include int main() { diff --git a/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/runtest.sh b/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/runtest.sh index 1434c47..44d3028 100755 --- a/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/runtest.sh +++ b/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/runtest.sh @@ -32,7 +32,7 @@ CMD='ltrace' BIN=$(which --skip-alias $CMD) PACKAGE="${PACKAGE:-$(rpm -qf --qf='%{name}\n' $BIN)}" -if rlIsRHEL 9 || rlIsFedora; then +if rlIsRHEL ">=9" || rlIsFedora; then PROC_NAME=dbus-broker SERVICE_NAME=dbus-broker elif rlIsRHEL 6; then diff --git a/tests/Sanity/random-apps/mthd2.c b/tests/Sanity/random-apps/mthd2.c index 6c0f154..9ef8a41 100644 --- a/tests/Sanity/random-apps/mthd2.c +++ b/tests/Sanity/random-apps/mthd2.c @@ -28,7 +28,7 @@ void *sub_thd(void *c) sub_func(); } -main(int argc, char *argv[]) +int main(int argc, char *argv[]) { int i; pthread_t thd[NTHD]; @@ -39,5 +39,6 @@ main(int argc, char *argv[]) pthread_create(&thd[i], NULL, sub_thd, NULL); } // pause(); + return 0; } diff --git a/tests/Sanity/random-apps/reproducer.c b/tests/Sanity/random-apps/reproducer.c index cca818c..c5df5d9 100644 --- a/tests/Sanity/random-apps/reproducer.c +++ b/tests/Sanity/random-apps/reproducer.c @@ -1,4 +1,5 @@ #include +#include void *start (void *arg) { return arg; diff --git a/tests/Sanity/random-apps/reproducer3.c b/tests/Sanity/random-apps/reproducer3.c index cca818c..c5df5d9 100644 --- a/tests/Sanity/random-apps/reproducer3.c +++ b/tests/Sanity/random-apps/reproducer3.c @@ -1,4 +1,5 @@ #include +#include void *start (void *arg) { return arg; diff --git a/tests/Sanity/random-apps/t_thread.c b/tests/Sanity/random-apps/t_thread.c index e1f24c3..d024f07 100644 --- a/tests/Sanity/random-apps/t_thread.c +++ b/tests/Sanity/random-apps/t_thread.c @@ -1,10 +1,11 @@ #include #include -#include +#include #include #include #include #include +#include #include //#include "trigger_error.h" #define THREAD_NUM 100 @@ -17,6 +18,14 @@ int fullid; int emptyid; int mutxid; +union semun +{ + int val; /* Value for SETVAL */ + struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */ + unsigned short *array; /* Array for GETALL, SETALL */ + struct seminfo *__buf; /* Buffer for IPC_INFO (Linux-specific) */ +}; + void *thread_handle_a(void *temp); int main(int argc, char *argv[]) diff --git a/tests/Sanity/random-apps/test_select.c b/tests/Sanity/random-apps/test_select.c index f13df3b..0ad3c34 100644 --- a/tests/Sanity/random-apps/test_select.c +++ b/tests/Sanity/random-apps/test_select.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include From 4b0ed33102d96241fd237f75a60b464beb204b14 Mon Sep 17 00:00:00 2001 From: Martin Coufal Date: Wed, 13 Nov 2024 10:42:54 +0100 Subject: [PATCH 60/64] tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries: fix for rhel10 * disable 32b part of the test for rhel10 * fix getting ARCH/SARCH * move reproducer to a separate file, add missing include --- .../Makefile | 2 +- .../reproducer.c | 7 +++++++ .../runtest.sh | 13 +++++++++---- 3 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/reproducer.c diff --git a/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/Makefile b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/Makefile index 4f22633..65e57b3 100644 --- a/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/Makefile +++ b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/Makefile @@ -29,7 +29,7 @@ export TESTVERSION=1.0 BUILT_FILES= -FILES=$(METADATA) runtest.sh Makefile PURPOSE +FILES=$(METADATA) runtest.sh Makefile PURPOSE reproducer.c .PHONY: all install download clean diff --git a/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/reproducer.c b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/reproducer.c new file mode 100644 index 0000000..5107daa --- /dev/null +++ b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/reproducer.c @@ -0,0 +1,7 @@ +#include + +int main() +{ + alarm(42); + return 0; +} diff --git a/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/runtest.sh b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/runtest.sh index 714dfc4..586a0c6 100755 --- a/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/runtest.sh +++ b/tests/Regression/bz868281-ltrace-doesn-t-work-on-PIE-binaries/runtest.sh @@ -39,14 +39,16 @@ rlJournalStart rlAssertRpm $LTRACE_RPM rlAssertRpm $GCC_RPM rlAssertRpm $BINUTILS_RPM - for arch in $(rlGetPrimaryArch) $(rlGetSecondaryArch); do + ARCH="$(rlGetPrimaryArch)" + SARCH="$(rlGetSecondaryArch)" + for arch in $ARCH $SARCH; do rlCheckRpm glibc.$arch done rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "cp reproducer.c $TmpDir" rlRun "pushd $TmpDir" if [ -d /usr/lib64 ]; then - ARCH=`uname -i` if [[ $ARCH =~ s390.* ]]; then if rlIsRHEL '>=8'; then rlLogInfo "RHEL-8 and newer do not support s390x 31-bit compilation" @@ -62,6 +64,9 @@ rlJournalStart elif [[ $ARCH =~ ia64|aarch64|ppc64le ]]; then rlLogInfo "$ARCH does not support 32-bit compilation" MBITS= + elif rlIsRHEL ">=10"; then + rlLogInfo "RHEL >=10 does not support 32-bit packages" + MBITS= else MBITS=32 fi @@ -69,11 +74,11 @@ rlJournalStart rlLogInfo "MBITS=$MBITS" - rlRun "echo 'int main(){alarm(42);return 0;}'| $GCC -fPIE -pie -x c -o a-native.out -" + rlRun "$GCC -fPIE -pie -x c reproducer.c -o a-native.out" rlAssertExists a-native.out if [ -n "$MBITS" ]; then - rlRun "echo 'int main(){alarm(42);return 0;}'| $GCC -fPIE -pie -m$MBITS -x c -o a-$MBITS.out -" + rlRun "$GCC -fPIE -pie -m$MBITS -x c reproducer.c -o a-$MBITS.out" rlAssertExists a-$MBITS.out fi rlPhaseEnd From 287df279b5062536e9aaffae262d157104e690a3 Mon Sep 17 00:00:00 2001 From: Martin Coufal Date: Wed, 13 Nov 2024 13:32:35 +0100 Subject: [PATCH 61/64] tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option: make pidof return only one PID --- .../runtest.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/runtest.sh b/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/runtest.sh index 44d3028..9c83e5e 100755 --- a/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/runtest.sh +++ b/tests/Regression/bz1360259-ltrace-crashes-when-run-on-certain-processes-with-the--S-option/runtest.sh @@ -52,13 +52,13 @@ rlJournalStart rlPhaseEnd rlPhaseStartTest - rlRun "PID=$(pidof $PROC_NAME)" + rlRun "PID='$(pidof -s $PROC_NAME)'" # try to ltrace dbus-daemon. If there is a bug (BZ#1360259), it will crash rlWatchdog "ltrace -S -p $PID > output.log 2>&1" 30 INT rlAssertEquals "ltrace is expected to be terminated by watchdog" 1 "$?" rlLog "output.log: $(cat output.log)" rlAssertNotGrep "\(Assertion.*failed\|Segmentation fault\)" output.log - rlAssertEquals "$PROC_NAME is expected to be still running" $PID "$(pidof $PROC_NAME)" + rlAssertEquals "$PROC_NAME is expected to be still running" $PID "$(pidof -s $PROC_NAME)" rlFileSubmit output.log rlPhaseEnd From 10f68c74442f9c689377c959e16f561a92ed4d5e Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 17 Jan 2025 16:07:24 +0000 Subject: [PATCH 62/64] Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild --- ltrace.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index 50baa0b..f4e4d9e 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 51%{?dist} +Release: 52%{?dist} # In coordination with Juan Céspedes, upstream is now officially on gitlab. # We are going to being sending all of our Fedora patches upstream to gitlab. URL: https://gitlab.com/cespedes/ltrace @@ -210,6 +210,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Fri Jan 17 2025 Fedora Release Engineering - 0.7.91-52 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + * Thu Jul 18 2024 Fedora Release Engineering - 0.7.91-51 - Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild From 955c1e43d17cef57e24d373985ab6a4299e68ee6 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 24 Jul 2025 20:55:16 +0000 Subject: [PATCH 63/64] Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild --- ltrace.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ltrace.spec b/ltrace.spec index f4e4d9e..f175967 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.7.91 -Release: 52%{?dist} +Release: 53%{?dist} # In coordination with Juan Céspedes, upstream is now officially on gitlab. # We are going to being sending all of our Fedora patches upstream to gitlab. URL: https://gitlab.com/cespedes/ltrace @@ -210,6 +210,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Thu Jul 24 2025 Fedora Release Engineering - 0.7.91-53 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + * Fri Jan 17 2025 Fedora Release Engineering - 0.7.91-52 - Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild From a8c41cd3541e3c22a6348350475cd6a1bcb603df Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Tue, 16 Sep 2025 12:54:36 -0400 Subject: [PATCH 64/64] Rebase to ltrace 0.8.1 --- .gitignore | 1 + ltrace.spec | 164 ++-------------------------------------------------- sources | 2 +- 3 files changed, 8 insertions(+), 159 deletions(-) diff --git a/.gitignore b/.gitignore index 45c391d..92e00dc 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ ltrace-*/ /ltrace-0.7.0.tar.bz2 /ltrace-0.7.2.tar.bz2 /ltrace-0.7.91.tar.bz2 +/ltrace-0.8.1.tar.bz2 diff --git a/ltrace.spec b/ltrace.spec index f175967..15301a6 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace -Version: 0.7.91 -Release: 53%{?dist} +Version: 0.8.1 +Release: 1%{?dist} # In coordination with Juan Céspedes, upstream is now officially on gitlab. # We are going to being sending all of our Fedora patches upstream to gitlab. URL: https://gitlab.com/cespedes/ltrace @@ -13,127 +13,9 @@ BuildRequires: autoconf automake libtool BuildRequires: gcc-c++ BuildRequires: make -# Note: this URL needs to be updated for each release, as the file -# number changes for each file. Full list of released files is at: -# https://alioth.debian.org/frs/?group_id=30892 +# https://gitlab.com/cespedes/ltrace/-/releases Source: ltrace-%{version}.tar.bz2 -# Merge of several upstream commits that fixes compilation on ARM. -Patch0: ltrace-0.7.91-arm.patch - -# Upstream patch that fixes accounting of exec, __libc_start_main and -# others in -c output. -Patch1: ltrace-0.7.91-account_execl.patch - -# Upstream patch that fixes interpretation of PLT on x86_64 when -# IRELATIVE slots are present. -Patch2: ltrace-0.7.91-x86_64-irelative.patch - -# Upstream patch that fixes fetching of system call arguments on s390. -Patch3: ltrace-0.7.91-s390-fetch-syscall.patch - -# Upstream patch that enables tracing of IRELATIVE PLT slots on s390. -Patch4: ltrace-0.7.91-s390-irelative.patch - -# Fix for a regression in tracing across fork. Upstream patch. -Patch5: ltrace-0.7.91-ppc64-fork.patch - -# Fix crashing a prelinked PPC64 binary which makes PLT calls through -# slots that ltrace doesn't trace. -# https://bugzilla.redhat.com/show_bug.cgi?id=1051221 -Patch6: ltrace-0.7.91-breakpoint-on_install.patch -Patch7: ltrace-0.7.91-ppc64-unprelink.patch - -# Man page nits. Backport of an upstream patch. -Patch8: ltrace-0.7.91-man.patch - -# https://bugzilla.redhat.com/show_bug.cgi?id=1044766 -Patch9: ltrace-0.7.91-cant_open.patch - -# Support Aarch64 architecture. -Patch10: ltrace-0.7.91-aarch64.patch - -# https://bugzilla.redhat.com/show_bug.cgi?id=1064406 -Patch11: ltrace-0.7.2-e_machine.patch - -# Support for ppc64le, backported from upstream. -# http://anonscm.debian.org/gitweb/?p=collab-maint/ltrace.git;a=commit;h=eea4ad2cce289753aaa35b4e0258a76d8f8f367c -# https://bugzilla.redhat.com/show_bug.cgi?id=1131956 -Patch13: ltrace-0.7.91-ppc64le-support.patch -# 35a9677dc9dcb7909ebd28f30200474d7e8b660f, -# 437d2377119036346f4dbd93039c847b4cc9d0be, -# eb3993420734f091cde9a6053ca6b4edcf9ae334 -Patch14: ltrace-0.7.91-ppc64le-fixes.patch - -# http://anonscm.debian.org/gitweb/?p=collab-maint/ltrace.git;a=commit;h=2e9f9f1f5d0fb223b109429b9c904504b7f638e2 -# http://anonscm.debian.org/gitweb/?p=collab-maint/ltrace.git;a=commit;h=f96635a03b3868057db5c2d7972d5533e2068345 -Patch15: ltrace-0.7.91-parser-ws_after_id.patch - -# https://bugzilla.redhat.com/show_bug.cgi?id=1171165 -# http://anonscm.debian.org/cgit/collab-maint/ltrace.git/commit/?id=d8f1287b85e2c2b2ae0235809e956f4365e53c45 -# http://anonscm.debian.org/cgit/collab-maint/ltrace.git/commit/?id=d80c5371454383e3f9978622e5578cf02af8c44c -# http://anonscm.debian.org/cgit/collab-maint/ltrace.git/commit/?id=bf82100966deda9c7d26ad085d97c08126a8ae88 -Patch16: ltrace-0.7.91-ppc-bias.patch - -# https://bugzilla.redhat.com/show_bug.cgi?id=1158714 -Patch17: ltrace-0.7.91-x86-plt_map.patch -Patch18: ltrace-0.7.91-x86-unused_label.patch - -# https://bugzilla.redhat.com/show_bug.cgi?id=1170315 -Patch19: ltrace-0.7.91-unwind-elfutils.patch - -# https://bugzilla.redhat.com/show_bug.cgi?id=1208351 -# http://anonscm.debian.org/cgit/collab-maint/ltrace.git/commit/?id=4724bd5a4a19db117a1d280b9d1a3508fd4e03fa -# http://anonscm.debian.org/cgit/collab-maint/ltrace.git/commit/?id=72ee29639c55b5942bc07c8ed0013005f8fc5a97 -Patch20: ltrace-0.7.91-multithread-no-f-1.patch -Patch21: ltrace-0.7.91-multithread-no-f-2.patch - -# Fix problems with building a number of test cases. -# http://anonscm.debian.org/cgit/collab-maint/ltrace.git/commit/?id=694d19ff14017926454771cbb63a22355b72f1bf -# http://anonscm.debian.org/cgit/collab-maint/ltrace.git/commit/?id=a3a03622fb4ca9772dca13eae724a94ba1e728f4 -Patch22: ltrace-0.7.91-testsuite-includes.patch -Patch23: ltrace-0.7.91-testsuite-includes-2.patch - -# https://bugzilla.redhat.com/show_bug.cgi?id=1210653 -# http://anonscm.debian.org/cgit/collab-maint/ltrace.git/commit/?id=eea6091f8672b01f7f022b0fc367e0f568225ffc -Patch24: ltrace-0.7.91-ppc64le-configure.patch - -Patch25: ltrace-rh1307754.patch - -# GCC now warns (errors) on "tautological compares", and readdir_r is deprecated. -Patch26: ltrace-0.7.91-tautology.patch - -# ARM code has unreachable code after switch statement, move initialization -Patch27: ltrace-rh1423913.patch - -# AARCH64 large parameters and syscall testsuite fixes. -Patch28: ltrace-0.7.91-aarch64-params.patch - -# gcc-9 fix. Avoid passing NULL as argument to %s -Patch29: ltrace-0.7.91-null.patch - -# Adds support for CET PLTs via second-plt lookups. -Patch30: ltrace-0.7.91-cet.patch - -# Extra #includes for gcc 9 -Patch31: ltrace-0.7.91-aarch64-headers.patch -# Testsuite: AARCH64 ifuncs not supported yet yet. -Patch32: ltrace-rh1225568.patch - -# testsuite fixes for pre-installed config files -Patch33: ltrace-0.7.91-testsuite-system_call_params.patch - -# Ignore bogus files from the environment -Patch34: ltrace-0.7.91-XDG_CONFIG_DIRS.patch - -# GCC erroneously warns about uninitialized values -Patch35: ltrace-0.7.91-rh1799619.patch - -# Support for both SC and SCV sycall insns -Patch36: ltrace-0.7.91-ppc64le-scv.patch - -Patch37: ltrace-0.7.91-W-use-after-free.patch - %description Ltrace is a debugging program which runs a specified command until the command exits. While the command is executing, ltrace intercepts and @@ -146,43 +28,6 @@ execution of processes. %prep %setup -q -n %{name}-%{version} -%patch -P0 -p1 -%patch -P1 -p1 -%patch -P2 -p1 -%patch -P3 -p1 -%patch -P4 -p1 -%patch -P5 -p1 -%patch -P6 -p1 -%patch -P7 -p1 -%patch -P8 -p1 -%patch -P9 -p1 -%patch -P10 -p1 -%patch -P11 -p1 -%patch -P13 -p1 -%patch -P14 -p1 -%patch -P15 -p1 -%patch -P16 -p1 -%patch -P17 -p1 -%patch -P18 -p1 -%patch -P19 -p1 -%patch -P20 -p1 -%patch -P21 -p1 -%patch -P22 -p1 -%patch -P23 -p1 -%patch -P24 -p1 -%patch -P25 -p1 -%patch -P26 -p1 -%patch -P27 -p1 -%patch -P28 -p1 -%patch -P29 -p1 -%patch -P30 -p1 -%patch -P31 -p1 -%patch -P32 -p1 -%patch -P33 -p1 -%patch -P34 -p1 -%patch -P35 -p1 -%patch -P36 -p1 -%patch -P37 -p1 %build autoreconf -i @@ -210,6 +55,9 @@ echo ====================TESTING END===================== %{_datadir}/ltrace %changelog +* Tue Sep 16 2025 DJ Delorie - 0.8.1-1 +- Rebased to ltrace 0.8.1 + * Thu Jul 24 2025 Fedora Release Engineering - 0.7.91-53 - Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild diff --git a/sources b/sources index a8420d6..1dd70e2 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -9db3bdee7cf3e11c87d8cc7673d4d25b ltrace-0.7.91.tar.bz2 +SHA512 (ltrace-0.8.1.tar.bz2) = 68fdf10abb3c9534987cb4fcf2531502f8376c56299d56908406ba903fa63af2e0a82c3b902ed0cd47e4985154155a4e9387a11ada066515de26486301dddbaf