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] 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