diff --git a/Regression/bz2214375-memmove_chk-seen-as-memcpy_chk/main.fmf b/Regression/bz2214375-memmove_chk-seen-as-memcpy_chk/main.fmf new file mode 100644 index 0000000..25833cd --- /dev/null +++ b/Regression/bz2214375-memmove_chk-seen-as-memcpy_chk/main.fmf @@ -0,0 +1,13 @@ +summary: Test that valgrind does not do overlap checks for memmove +contact: Jesus Checa Hidalgo +component: + - valgrind +test: ./runtest.sh +framework: beakerlib +require: + - valgrind + - gcc +duration: 5m +link: + - relates: https://bugzilla.redhat.com/show_bug.cgi?id=2214375 + - relates: https://bugzilla.redhat.com/show_bug.cgi?id=2214374 \ No newline at end of file diff --git a/Regression/bz2214375-memmove_chk-seen-as-memcpy_chk/reproducer.c b/Regression/bz2214375-memmove_chk-seen-as-memcpy_chk/reproducer.c new file mode 100644 index 0000000..80d4b4c --- /dev/null +++ b/Regression/bz2214375-memmove_chk-seen-as-memcpy_chk/reproducer.c @@ -0,0 +1,18 @@ +#include +#include + +volatile char *s; + +char * +__memcpy_chk(char *d, const char *s, size_t n, size_t dn); + +char * +__memmove_chk(char *d, const char *s, size_t n, size_t dn); + +int main(int argc,const char *argv[]) +{ + char buffer[100]; + __memcpy_chk(buffer, &buffer[20], 9, 100); + __memmove_chk(buffer, &buffer[1], 99, 100); + return 0; +} \ No newline at end of file diff --git a/Regression/bz2214375-memmove_chk-seen-as-memcpy_chk/runtest.sh b/Regression/bz2214375-memmove_chk-seen-as-memcpy_chk/runtest.sh new file mode 100755 index 0000000..0b4e42b --- /dev/null +++ b/Regression/bz2214375-memmove_chk-seen-as-memcpy_chk/runtest.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +rlJournalStart + rlPhaseStartSetup + rlRun "tmp=\$(mktemp -d)" 0 "Create tmp directory" + rlRun "cp reproducer.c $tmp" + rlRun "pushd $tmp" + rlRun "set -o pipefail" + rlPhaseEnd + + rlPhaseStartTest + rlRun "gcc -Wno-builtin-declaration-mismatch -g -o reproducer reproducer.c" + + rlRun "valgrind ./reproducer 2> output.log" 0 "Running reproducer" + rlAssertNotGrep "overlap in memcpy_chk" output.log + rlAssertGrep "ERROR SUMMARY: 0 errors from 0 contexts " output.log + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $tmp" 0 "Remove tmp directory" + rlPhaseEnd +rlJournalEnd diff --git a/Regression/bz580078-valgrind-aborts-with-vex-x86-IR-unhandled-instruction-bytes/case1.c b/Regression/bz580078-valgrind-aborts-with-vex-x86-IR-unhandled-instruction-bytes/case1.c index 525db32..95b5e2b 100644 --- a/Regression/bz580078-valgrind-aborts-with-vex-x86-IR-unhandled-instruction-bytes/case1.c +++ b/Regression/bz580078-valgrind-aborts-with-vex-x86-IR-unhandled-instruction-bytes/case1.c @@ -1,6 +1,8 @@ #include #include +extern int NSS_NoDB_Init(void*); + int main() { NSS_NoDB_Init(NULL); diff --git a/Regression/bz580078-valgrind-aborts-with-vex-x86-IR-unhandled-instruction-bytes/main.fmf b/Regression/bz580078-valgrind-aborts-with-vex-x86-IR-unhandled-instruction-bytes/main.fmf index 3844c59..e488ec0 100644 --- a/Regression/bz580078-valgrind-aborts-with-vex-x86-IR-unhandled-instruction-bytes/main.fmf +++ b/Regression/bz580078-valgrind-aborts-with-vex-x86-IR-unhandled-instruction-bytes/main.fmf @@ -45,6 +45,10 @@ adjust: - enabled: false when: arch != x86_64 + # No i686 in RHEL-10+ + - enabled: false + when: distro >= rhel-10 + # Testing farm does not support installing i686 packages in bodhi update testing, # so we disable this test there until that capacity is implemented. - enabled: false diff --git a/Regression/kde470978-ioctl-kvm_create_vm-s390x-pgste/main.fmf b/Regression/kde470978-ioctl-kvm_create_vm-s390x-pgste/main.fmf new file mode 100644 index 0000000..7e64471 --- /dev/null +++ b/Regression/kde470978-ioctl-kvm_create_vm-s390x-pgste/main.fmf @@ -0,0 +1,21 @@ +summary: Test ioctl(KVM_CREATE_VM) in s390x +description: > + KVM guests on s390x need PGSTE enabled to be created. If valgrind runs a + binary that creates a guest, it also need PGSTE enabled or the VM creation + would fail. +contact: Jesus Checa Hidalgo +component: + - valgrind +test: ./runtest.sh +framework: beakerlib +require: + - valgrind + - gcc +duration: 5m +link: + - relates: https://bugs.kde.org/show_bug.cgi?id=470978 + +adjust: + - because: "Test applicable to s390x only" + enabled: false + when: arch != s390x diff --git a/Regression/kde470978-ioctl-kvm_create_vm-s390x-pgste/reproducer.c b/Regression/kde470978-ioctl-kvm_create_vm-s390x-pgste/reproducer.c new file mode 100644 index 0000000..607a527 --- /dev/null +++ b/Regression/kde470978-ioctl-kvm_create_vm-s390x-pgste/reproducer.c @@ -0,0 +1,31 @@ +#include +#include +#include +#include +#include +#include + +int main(){ + int result = 0; + + int kvm_fd = open("/dev/kvm", O_RDWR); + if (kvm_fd < 0) { + perror("open /dev/kvm failed"); + result = -1; + } + + int vm_fd; + do { + vm_fd = ioctl(kvm_fd, KVM_CREATE_VM, 0); + } while( vm_fd == -1 && errno == EINTR); + + if( vm_fd < 0){ + perror ("ioctl KVM_CREATE_VM failed"); + result = -1; + } + + if (kvm_fd >= 0) close(kvm_fd); + if (vm_fd >=0) close(vm_fd); + + return result; +} diff --git a/Regression/kde470978-ioctl-kvm_create_vm-s390x-pgste/runtest.sh b/Regression/kde470978-ioctl-kvm_create_vm-s390x-pgste/runtest.sh new file mode 100755 index 0000000..8af54f6 --- /dev/null +++ b/Regression/kde470978-ioctl-kvm_create_vm-s390x-pgste/runtest.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +rlJournalStart + rlPhaseStartSetup + rlRun "tmp=\$(mktemp -d)" 0 "Create tmp directory" + rlRun "cp reproducer.c $tmp" + rlRun "pushd $tmp" + rlRun "set -o pipefail" + rlPhaseEnd + + rlPhaseStartTest + rlRun "gcc -g -o reproducer reproducer.c -Wl,--s390-pgste" + + rlRun "./reproducer 2> output.log" 0 "Running reproducer" + rlAssertNotGrep "ioctl KVM_CREATE_VM failed" output.log + + rlRun "valgrind ./reproducer 2> output.log" 0 "Running with valgrind" + rlAssertNotGrep "ioctl KVM_CREATE_VM failed" output.log + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $tmp" 0 "Remove tmp directory" + rlPhaseEnd +rlJournalEnd diff --git a/Regression/kde476548-contiguous-rodata-sections/hello.c b/Regression/kde476548-contiguous-rodata-sections/hello.c new file mode 100644 index 0000000..eed907c --- /dev/null +++ b/Regression/kde476548-contiguous-rodata-sections/hello.c @@ -0,0 +1,11 @@ +#include + +__attribute__((section(".rodatac"))) +const char * const constchars = "abcde"; +__attribute__((section(".rodatan"))) +const char * const constnums = "123"; + +int main () { + const char * const constmain = "mainmainmain"; + char *leak = (char*) malloc(16); +} diff --git a/Regression/kde476548-contiguous-rodata-sections/main.fmf b/Regression/kde476548-contiguous-rodata-sections/main.fmf new file mode 100644 index 0000000..9b83693 --- /dev/null +++ b/Regression/kde476548-contiguous-rodata-sections/main.fmf @@ -0,0 +1,16 @@ +summary: Test contiguous rodata sections are processed correctly +description: | + "Valgrind should process contiguous rodata segments as different sections + instead of merging them together" +contact: Jesus Checa Hidalgo +test: ./test.sh +framework: beakerlib +duration: 5m +require: + - valgrind + - elfutils + - gcc +tier: 1 +link: + - verifies: https://issues.redhat.com/browse/RHEL-18086 + - relates: https://bugs.kde.org/show_bug.cgi?id=476548 diff --git a/Regression/kde476548-contiguous-rodata-sections/test.sh b/Regression/kde476548-contiguous-rodata-sections/test.sh new file mode 100755 index 0000000..a344b88 --- /dev/null +++ b/Regression/kde476548-contiguous-rodata-sections/test.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +rlJournalStart + rlPhaseStartSetup + rlRun "tmp=\$(mktemp -d)" 0 "Create tmp directory" + rlRun "cp hello.c $tmp" + rlRun "pushd $tmp" + rlRun "set -o pipefail" + rlPhaseEnd + + rlPhaseStartTest + rlRun "gcc -g -o test hello.c" + rlRun "eu-strip -o t.exec -f t.debug test" + rlRun "valgrind --log-file=valgrind.output ./t.exec" + rlAssertNotGrep "Assertion 'di->rodata_size == a_shdr.sh_size' failed" valgrind.output + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $tmp" 0 "Remove tmp directory" + rlPhaseEnd +rlJournalEnd diff --git a/Sanity/32bit-on-64bit-os/main.fmf b/Sanity/32bit-on-64bit-os/main.fmf index 1b41f20..af58f83 100644 --- a/Sanity/32bit-on-64bit-os/main.fmf +++ b/Sanity/32bit-on-64bit-os/main.fmf @@ -26,6 +26,10 @@ adjust: - enabled: false when: arch != x86_64 + # No i686 in RHEL-10+ + - enabled: false + when: distro >= rhel-10 + # Testing farm does not support installing i686 packages in bodhi update testing, # so we disable this test there until that capacity is implemented. - enabled: false diff --git a/Sanity/install-weak-deps/main.fmf b/Sanity/install-weak-deps/main.fmf new file mode 100644 index 0000000..9e4aa46 --- /dev/null +++ b/Sanity/install-weak-deps/main.fmf @@ -0,0 +1,6 @@ +summary: Make sure dnf installs weak dep packages (such as valgrind + valgrind-scripts) +test: ./runtest.sh +framework: beakerlib +require: + - rpm-build + - createrepo diff --git a/Sanity/install-weak-deps/runtest.sh b/Sanity/install-weak-deps/runtest.sh new file mode 100755 index 0000000..b952e10 --- /dev/null +++ b/Sanity/install-weak-deps/runtest.sh @@ -0,0 +1,50 @@ +#!/bin/bash +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +DNFSWITCHES="--disablerepo=\* --enablerepo=mytestingrepo" + +rlJournalStart + rlPhaseStartSetup + rlRun "dnf -y remove trivial-empty\* ||:" + rlRun "rm /etc/yum.repos.d/mytestingrepo.repo ||:" + rlPhaseEnd + + rlPhaseStartTest + rlRun "rpmbuild -ba trivial-empty-v1.spec" + rlRun "rpmbuild -ba trivial-empty-v2.spec" + rlRun "a=$(rpm -E '%_arch')" + rlRun "pushd $HOME/rpmbuild/RPMS/$a" + rlRun "createrepo ." + rlRun "popd" + rlRun "rpm -Uvh --nosignature $HOME/rpmbuild/RPMS/$a/trivial-empty-1.0-1*" + rlRun "rpm -qa | grep -F trivial-empty-sub" 1 + rlRun "rpm -qa | grep -F trivial-empty-1.0-1" + rlRun "rpm -qa | grep -F trivial-empty-1.0-2" 1 + cat > /etc/yum.repos.d/mytestingrepo.repo < - 1.0-1 +- Initial creation of a trivial RPM with no payload diff --git a/Sanity/install-weak-deps/trivial-empty-v2.spec b/Sanity/install-weak-deps/trivial-empty-v2.spec new file mode 100644 index 0000000..155b79c --- /dev/null +++ b/Sanity/install-weak-deps/trivial-empty-v2.spec @@ -0,0 +1,52 @@ +Name: trivial-empty +Version: 1.0 +Release: 2%{?dist} +Epoch: 1 +Summary: A trivial RPM package with an empty payload + +License: MIT +BuildArch: %_arch + +# Set weak dependency on trivial-empty-sub which is a new subpackage +# introduced within this update +Recommends: trivial-empty-sub = %{epoch}:%{version}-%{release} +# Requires: trivial-empty-sub = %{epoch}:%{version}-%{release} + +# Description of the package +%description +This is a trivial RPM package with no payload. It serves as an example +of how to create an RPM specfile with minimal content. + +%package sub +Summary: A trivial RPM subpackage with an empty payload +# Description for the subpackage +%description sub +This is a subpackage of trivial-empty, with an empty payload. + +# Prep stage: nothing to prepare +%prep +# Empty section + +# Build stage: nothing to build +%build +# Empty section + +# Install stage: nothing to install +%install +# Empty section + +# Files: no files to include +%files +# Empty section + +# Subpackage files: no files to include +%files sub +# Empty section + +# Changelog for the RPM package +%changelog +* Thu Jan 16 2025 Example Maintainer - 1.0-2 +- Initial creation of the trivial RPM with no payload + +* Thu Jan 16 2025 Example Maintainer - 1.0-1 +- Initial creation of a trivial RPM with no payload diff --git a/Sanity/valgrind-scripts-smoke/main.fmf b/Sanity/valgrind-scripts-smoke/main.fmf new file mode 100644 index 0000000..9b05b94 --- /dev/null +++ b/Sanity/valgrind-scripts-smoke/main.fmf @@ -0,0 +1,10 @@ +summary: Smoke test for valgrind scripts +contact: Jesus Checa Hidalgo +component: + - valgrind +test: ./runtest.sh +framework: beakerlib +require: + - valgrind +tier: 1 +duration: 5m \ No newline at end of file diff --git a/Sanity/valgrind-scripts-smoke/runtest.sh b/Sanity/valgrind-scripts-smoke/runtest.sh new file mode 100755 index 0000000..461dc56 --- /dev/null +++ b/Sanity/valgrind-scripts-smoke/runtest.sh @@ -0,0 +1,48 @@ +#!/bin/bash +# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +VERSION=$(rpm -q --queryformat="%{version}" valgrind.$(uname -m)) +rlJournalStart + rlPhaseStartSetup + rlRun "tmp=\$(mktemp -d)" 0 "Create tmp directory" + rlRun "pushd $tmp" + rlRun "set -o pipefail" + rlPhaseEnd + + rlPhaseStartTest + for prog in $(rpm -ql valgrind | grep ^/usr/bin); do + if file $prog | grep -q ELF; then + rlLogDebug "Skipping ELF executable ${prog}" + continue + fi + + LOGFILE="$(basename $prog).log" + if ${prog} --version &> $LOGFILE; then + rlPass "[ok] $prog" + continue + fi + + # Perl scripts might return other than 0 but still be correct. + # This is because some of them print the version/help message with + # die() instead doing a print() and exit. die() always set the + # return code to 255. Hence we rely on grepping the version string, + # and make sure that the log contains only one line. + if grep -q "$(basename $prog)-${VERSION}" $LOGFILE \ + && [[ $(wc -l < $LOGFILE) -eq "1" ]]; + then + rlPass "[ok] $prog" + continue + fi + + # Anything else is a failure + rlFail "[fail] $prog" + rlLog "$(cat $LOGFILE)" + done + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $tmp" 0 "Remove tmp directory" + rlPhaseEnd +rlJournalEnd