Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp2455055pxb; Fri, 29 Oct 2021 01:33:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwORdR0EP/n4wVqzuCmKXQ44HBXxJBwG7WTEZt025evuWyWUwQYTnq5I4vao52ZY7Ul+Du+ X-Received: by 2002:a17:902:e543:b0:13f:dffb:8e6 with SMTP id n3-20020a170902e54300b0013fdffb08e6mr8461414plf.27.1635496411538; Fri, 29 Oct 2021 01:33:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1635496411; cv=none; d=google.com; s=arc-20160816; b=z+7xq6DOBejuYw/XAVjPG9Zxnn9HanRaFwAlNVdboN0o67Qy3Y3tWq5FrqijRrXgDF b3Rx2jjTMywxPDvqApAiX86/XW4rdNzSqpONMpgdwEdyjccHSv+pbJYA41kAVWI57I2o iLylNrWd1pgBETRMSbcVfCPowNWdy0Anh8X5Y8L3C5NcWdKHAepKMX2N9yPa5dG81Pf3 om0mxqr0Ov5/XBmSFsas/J5O92SQO6nUOeQtY8YZukOz7hFnoMHxCV3JmPCUFMvNTuxU fioO0zFIQSClYRdgogPh23YU75jh4j7D3wKZiU84OZj5T/nf/55TKImq96pMRuGW/46c ZigQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=U+wQZL5tE+5sCIvEi6H1X/LbLsgt7/UJCgi6I5EYauw=; b=EJwTRQRH3hECNK/FcUzKVxFCCv6UgoT3gm9gXaPdibnwyK5WVkqHTOpGOUimAzhQH8 qQRab73sdp4Xo/EwpU37P0pFseRLtHKAvxxcwzbVl9oSJn2F7cTqM1P4592JURBilWJQ ebyLglIHqGLjB857+rwxfH4k2ufQMisW6CYY+44ruvJttZmPT4QF9lBlfCxuhSiBqper UsIh2STc5EbIdHgH/oqnnmNCWJap8MZIbHu77yLpDLOfu+KIkQr9peD5weFAbHKgmQB9 l21yZQyGxyWTD+MtW5ZCk9YQZkiExOqKUQ//FUjEkPX/wSj2CacUA/tnBF0nY1JzYqD/ VDGg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c4si7832297pfl.29.2021.10.29.01.33.18; Fri, 29 Oct 2021 01:33:31 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232437AbhJ2Idr convert rfc822-to-8bit (ORCPT + 99 others); Fri, 29 Oct 2021 04:33:47 -0400 Received: from mail.kernel.org ([198.145.29.99]:43862 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232433AbhJ2Idn (ORCPT ); Fri, 29 Oct 2021 04:33:43 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id DA6CF6115B; Fri, 29 Oct 2021 08:31:12 +0000 (UTC) Date: Fri, 29 Oct 2021 10:31:10 +0200 From: Christian Brauner To: Li Zhijian Cc: linux-kselftest@vger.kernel.org, shuah@kernel.org, linux-kernel@vger.kernel.org, Kees Cook , Andy Lutomirski , Will Drewry , Christian Brauner , Philip Li , yang xu Subject: Re: [PATCH 1/2] kselftest: signal all child processes Message-ID: <20211029083110.syhqfc3ivaj53ygl@wittgenstein> References: <20211029024528.8086-1-lizhijian@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8BIT In-Reply-To: <20211029024528.8086-1-lizhijian@cn.fujitsu.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Oct 29, 2021 at 10:45:27AM +0800, Li Zhijian wrote: > We have some many cases that will create child process as well, such as > pidfd_wait. Previously, we will signal/kill the parent process when it > is time out, but this signal will not be sent to its child process. In > such case, if child process doesn't terminate itself, ksefltest framework > will hang forever. > > below ps tree show the situation when ksefltest is blocking: > root 1172 0.0 0.0 5996 2500 ? S 07:03 0:00 \_ /bin/bash /lkp/lkp/src/tests/kernel-selftests > root 1216 0.0 0.0 4392 1976 ? S 07:03 0:00 \_ make run_tests -C pidfd > root 1218 0.0 0.0 2396 1652 ? S 07:03 0:00 \_ /bin/sh -c BASE_DIR="/usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests"; . /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/kselftest/runner.sh; if [ "X" != "X" ]; then per_test_logging=1; fi; run_many /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_test /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_fdinfo_test /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_open_test /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_poll_test /usr/src/perf_selftests-x86_64-rhel-8. > root 12491 0.0 0.0 2396 132 ? S 07:03 0:00 \_ /bin/sh -c BASE_DIR="/usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests"; . /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/kselftest/runner.sh; if [ "X" != "X" ]; then per_test_logging=1; fi; run_many /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_test /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_fdinfo_test /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_open_test /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_poll_test /usr/src/perf_selftests-x86_64-rhe > root 12492 0.0 0.0 2396 132 ? S 07:03 0:00 \_ /bin/sh -c BASE_DIR="/usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests"; . /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/kselftest/runner.sh; if [ "X" != "X" ]; then per_test_logging=1; fi; run_many /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_test /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_fdinfo_test /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_open_test /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_poll_test /usr/src/perf_selftests-x86_64 > root 12493 0.0 0.0 2396 132 ? S 07:03 0:00 \_ /bin/sh -c BASE_DIR="/usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests"; . /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/kselftest/runner.sh; if [ "X" != "X" ]; then per_test_logging=1; fi; run_many /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_test /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_fdinfo_test /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_open_test /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_poll_test /usr/src/perf_selftests-x8 > root 12496 0.0 0.0 2396 132 ? S 07:03 0:00 \_ /bin/sh -c BASE_DIR="/usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests"; . /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/kselftest/runner.sh; if [ "X" != "X" ]; then per_test_logging=1; fi; run_many /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_test /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_fdinfo_test /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_open_test /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/pidfd/pidfd_poll_test /usr/src/perf_selftest > root 12498 0.0 0.0 10564 6116 ? S 07:03 0:00 \_ perl /usr/src/perf_selftests-x86_64-rhel-8.3-kselftests-519d81956ee277b4419c723adfb154603c2565ba/tools/testing/selftests/kselftest/prefix.pl > root 12503 0.0 0.0 2452 112 ? T 07:03 0:00 ./pidfd_wait > root 12621 0.0 0.0 2372 1600 ? SLs 07:04 0:00 /usr/sbin/watchdog > root 19438 0.0 0.0 992 60 ? Ss 07:39 0:00 /lkp/lkp/src/bin/event/wakeup activate-monitor > > Here we group all its child processes so that kill() can signal all of > them in timeout. > > CC: Kees Cook > CC: Andy Lutomirski > CC: Will Drewry > CC: Shuah Khan > CC: Christian Brauner > CC: Philip Li > Suggested-by: yang xu > Signed-off-by: Li Zhijian > --- Seems sensible. Is it guaranteed that t->pid is neither 0 nor 1? If not then maybe sanity check t->pid at least for not being 1 as negating that would mean "signal everything that you have permission to signal". :) Otherwise, Acked-by: Christian Brauner > tools/testing/selftests/kselftest_harness.h | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/tools/testing/selftests/kselftest_harness.h b/tools/testing/selftests/kselftest_harness.h > index ae0f0f33b2a6..c7251396e7ee 100644 > --- a/tools/testing/selftests/kselftest_harness.h > +++ b/tools/testing/selftests/kselftest_harness.h > @@ -875,7 +875,8 @@ static void __timeout_handler(int sig, siginfo_t *info, void *ucontext) > } > > t->timed_out = true; > - kill(t->pid, SIGKILL); > + // signal process group > + kill(-(t->pid), SIGKILL); > } > > void __wait_for_test(struct __test_metadata *t) > @@ -985,6 +986,7 @@ void __run_test(struct __fixture_metadata *f, > ksft_print_msg("ERROR SPAWNING TEST CHILD\n"); > t->passed = 0; > } else if (t->pid == 0) { > + setpgrp(); > t->fn(t, variant); > if (t->skip) > _exit(255); > -- > 2.33.0 > > >