From patchwork Tue Aug 24 19:28:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 44782 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E2B5B385843D for ; Tue, 24 Aug 2021 19:29:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E2B5B385843D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1629833373; bh=/s53TkXzT/OBDvrfn1huXt1Nx+BYOf2nYBRZVJpa/d8=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=UlcNimAXDqQ5iubo3HKKr7KWka3WfwpfZMAPYkf9phx5Q/TvJuLskXqmiq+CIIBBz 7BnokWB+7GYCl+iMsSOaTcTTW+wseIoDHr2W0gubn14LS6DwBS+gBs4HZ8s36wkJ5/ X+QwXORrtdhdxVfBRJMyz0pJKRtDt5z386EeqzLc= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-qt1-x82f.google.com (mail-qt1-x82f.google.com [IPv6:2607:f8b0:4864:20::82f]) by sourceware.org (Postfix) with ESMTPS id 6F9CB3858409 for ; Tue, 24 Aug 2021 19:29:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6F9CB3858409 Received: by mail-qt1-x82f.google.com with SMTP id g11so17793061qtk.5 for ; Tue, 24 Aug 2021 12:29:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/s53TkXzT/OBDvrfn1huXt1Nx+BYOf2nYBRZVJpa/d8=; b=U9Oom24nRnefrWPMBOCeFWWtUDff4uwNu6mO1z7tvqhAhPC8VdOQpAkqolFQWPPNuT XxWq/OZTmmaokcrukwS0HUM8tRTuHUZxEaDpX3ub0cPGWkAIXQlFu3Zc6AAQvkGfp4R+ NzWZpQw9vF3A7A/0QTy5nJn7zDFYVEGsui3NPo9mIkRmJ1HZjJ6GiVuTv92JU0J9ddT7 AKMa5stQcjcIK2ATsiECl9a/3L+J55Tbct/bWsrrLRg0D9kqR/WiyOBc2gAcWtJBRUfv sdA6FJyfpguCkftOBQgcNz0JrErXypykwn3mh+2QNUNqnxLFIJPLB23PEXRHCQEDKJPP b1ug== X-Gm-Message-State: AOAM530FRH9Uv+3xrJmQWgnEYCCO65ca/pueIKb53OvGvc9VQFozTzgs Svih9MBihEMO3bgS5df5c8xVRdIQ5twrHQ== X-Google-Smtp-Source: ABdhPJx7VFfSC9HfAUWjMeNY6IfeH7LYqI5uCQxpRcEKHWDptCN2NJp3Us+aHo6MR9nXJFD6ZaZlYQ== X-Received: by 2002:ac8:5acb:: with SMTP id d11mr35932952qtd.287.1629833343886; Tue, 24 Aug 2021 12:29:03 -0700 (PDT) Received: from birita.. ([2804:431:c7ca:cd83:3337:ab4f:e3a1:7ba5]) by smtp.gmail.com with ESMTPSA id s20sm7482674qtw.14.2021.08.24.12.29.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Aug 2021 12:29:03 -0700 (PDT) To: libc-alpha@sourceware.org Subject: [PATCH 2/2] Use support_open_dev_null_range io/tst-closefrom, misc/tst-close_range, and posix/tst-spawn5 (BZ #28260) Date: Tue, 24 Aug 2021 16:28:58 -0300 Message-Id: <20210824192858.681680-3-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210824192858.681680-1-adhemerval.zanella@linaro.org> References: <20210824192858.681680-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" It ensures a continuous range of file descriptor and avoid hitting the RLIMIT_NOFILE. Checked on x86_64-linux-gnu. --- io/tst-closefrom.c | 15 +++----------- posix/tst-spawn5.c | 13 +----------- sysdeps/unix/sysv/linux/tst-close_range.c | 25 +++++++---------------- 3 files changed, 11 insertions(+), 42 deletions(-) diff --git a/io/tst-closefrom.c b/io/tst-closefrom.c index d4c187073c..0800e19f3f 100644 --- a/io/tst-closefrom.c +++ b/io/tst-closefrom.c @@ -24,29 +24,20 @@ #include #include #include +#include #include #define NFDS 100 -static int -open_multiple_temp_files (void) -{ - /* Check if the temporary file descriptor has no no gaps. */ - int lowfd = xopen ("/dev/null", O_RDONLY, 0600); - for (int i = 1; i <= NFDS; i++) - TEST_COMPARE (xopen ("/dev/null", O_RDONLY, 0600), lowfd + i); - return lowfd; -} - static int closefrom_test (void) { struct support_descriptors *descrs = support_descriptors_list (); - int lowfd = open_multiple_temp_files (); + int lowfd = support_open_dev_null_range (NFDS, O_RDONLY, 0600); - const int maximum_fd = lowfd + NFDS; + const int maximum_fd = lowfd + NFDS - 1; const int half_fd = lowfd + NFDS / 2; const int gap = maximum_fd / 4; diff --git a/posix/tst-spawn5.c b/posix/tst-spawn5.c index ac66738004..a95199af6b 100644 --- a/posix/tst-spawn5.c +++ b/posix/tst-spawn5.c @@ -47,17 +47,6 @@ static int initial_argv_count; #define NFDS 100 -static int -open_multiple_temp_files (void) -{ - /* Check if the temporary file descriptor has no no gaps. */ - int lowfd = xopen ("/dev/null", O_RDONLY, 0600); - for (int i = 1; i <= NFDS; i++) - TEST_COMPARE (xopen ("/dev/null", O_RDONLY, 0600), - lowfd + i); - return lowfd; -} - static int parse_fd (const char *str) { @@ -185,7 +174,7 @@ spawn_closefrom_test (posix_spawn_file_actions_t *fa, int lowfd, int highfd, static void do_test_closefrom (void) { - int lowfd = open_multiple_temp_files (); + int lowfd = support_open_dev_null_range (NFDS, O_RDONLY, 0600); const int half_fd = lowfd + NFDS / 2; /* Close half of the descriptors and check result. */ diff --git a/sysdeps/unix/sysv/linux/tst-close_range.c b/sysdeps/unix/sysv/linux/tst-close_range.c index dccb6189c5..3548b10363 100644 --- a/sysdeps/unix/sysv/linux/tst-close_range.c +++ b/sysdeps/unix/sysv/linux/tst-close_range.c @@ -36,23 +36,12 @@ #define NFDS 100 -static int -open_multiple_temp_files (void) -{ - /* Check if the temporary file descriptor has no no gaps. */ - int lowfd = xopen ("/dev/null", O_RDONLY, 0600); - for (int i = 1; i <= NFDS; i++) - TEST_COMPARE (xopen ("/dev/null", O_RDONLY, 0600), - lowfd + i); - return lowfd; -} - static void close_range_test_max_upper_limit (void) { struct support_descriptors *descrs = support_descriptors_list (); - int lowfd = open_multiple_temp_files (); + int lowfd = support_open_dev_null_range (NFDS, O_RDONLY, 0600); { int r = close_range (lowfd, ~0U, 0); @@ -68,7 +57,7 @@ close_range_test_max_upper_limit (void) static void close_range_test_common (int lowfd, unsigned int flags) { - const int maximum_fd = lowfd + NFDS; + const int maximum_fd = lowfd + NFDS - 1; const int half_fd = lowfd + NFDS / 2; const int gap_1 = maximum_fd - 8; @@ -121,7 +110,7 @@ close_range_test (void) struct support_descriptors *descrs = support_descriptors_list (); /* Check if the temporary file descriptor has no no gaps. */ - int lowfd = open_multiple_temp_files (); + int lowfd = support_open_dev_null_range (NFDS, O_RDONLY, 0600); close_range_test_common (lowfd, 0); @@ -146,7 +135,7 @@ close_range_test_subprocess (void) struct support_descriptors *descrs = support_descriptors_list (); /* Check if the temporary file descriptor has no no gaps. */ - int lowfd = open_multiple_temp_files (); + int lowfd = support_open_dev_null_range (NFDS, O_RDONLY, 0600); struct support_stack stack = support_stack_alloc (4096); @@ -184,7 +173,7 @@ close_range_unshare_test (void) struct support_descriptors *descrs1 = support_descriptors_list (); /* Check if the temporary file descriptor has no no gaps. */ - int lowfd = open_multiple_temp_files (); + int lowfd = support_open_dev_null_range (NFDS, O_RDONLY, 0600); struct support_descriptors *descrs2 = support_descriptors_list (); @@ -226,9 +215,9 @@ static void close_range_cloexec_test (void) { /* Check if the temporary file descriptor has no no gaps. */ - const int lowfd = open_multiple_temp_files (); + int lowfd = support_open_dev_null_range (NFDS, O_RDONLY, 0600); - const int maximum_fd = lowfd + NFDS; + const int maximum_fd = lowfd + NFDS - 1; const int half_fd = lowfd + NFDS / 2; const int gap_1 = maximum_fd - 8;