summaryrefslogtreecommitdiff
path: root/Use-support_open_dev_null_range-io-tst-closefrom-mis.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Use-support_open_dev_null_range-io-tst-closefrom-mis.patch')
-rw-r--r--Use-support_open_dev_null_range-io-tst-closefrom-mis.patch212
1 files changed, 212 insertions, 0 deletions
diff --git a/Use-support_open_dev_null_range-io-tst-closefrom-mis.patch b/Use-support_open_dev_null_range-io-tst-closefrom-mis.patch
new file mode 100644
index 0000000..bd7da16
--- /dev/null
+++ b/Use-support_open_dev_null_range-io-tst-closefrom-mis.patch
@@ -0,0 +1,212 @@
+From 772e33411bc730f832f415f93eb3e7c67e4d5488 Mon Sep 17 00:00:00 2001
+From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
+Date: Tue, 24 Aug 2021 16:15:50 -0300
+Subject: [PATCH] Use support_open_dev_null_range io/tst-closefrom,
+ misc/tst-close_range, and posix/tst-spawn5 (BZ #28260)
+
+It ensures a continuous range of file descriptor and avoid hitting
+the RLIMIT_NOFILE.
+
+Checked on x86_64-linux-gnu.
+
+(cherry picked from commit 6b20880b22d1d0fce7e9f506baa6fe2d5c7fcfdc)
+---
+ io/tst-closefrom.c | 21 ++++++---------------
+ posix/tst-spawn5.c | 13 +------------
+ sysdeps/unix/sysv/linux/tst-close_range.c | 31 ++++++++++---------------------
+ 3 files changed, 17 insertions(+), 48 deletions(-)
+
+diff --git a/io/tst-closefrom.c b/io/tst-closefrom.c
+index d4c1870..395ec0d 100644
+--- a/io/tst-closefrom.c
++++ b/io/tst-closefrom.c
+@@ -24,31 +24,22 @@
+ #include <support/check.h>
+ #include <support/descriptors.h>
+ #include <support/xunistd.h>
++#include <support/support.h>
+
+ #include <array_length.h>
+
+ #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;
++ const int gap = lowfd + NFDS / 4;
+
+ /* Close half of the descriptors and check result. */
+ closefrom (half_fd);
+@@ -58,7 +49,7 @@ closefrom_test (void)
+ TEST_COMPARE (fcntl (i, F_GETFL), -1);
+ TEST_COMPARE (errno, EBADF);
+ }
+- for (int i = 0; i < half_fd; i++)
++ for (int i = lowfd; i < half_fd; i++)
+ TEST_VERIFY (fcntl (i, F_GETFL) > -1);
+
+ /* Create some gaps, close up to a threshold, and check result. */
+@@ -74,7 +65,7 @@ closefrom_test (void)
+ TEST_COMPARE (fcntl (i, F_GETFL), -1);
+ TEST_COMPARE (errno, EBADF);
+ }
+- for (int i = 0; i < gap; i++)
++ for (int i = lowfd; i < gap; i++)
+ TEST_VERIFY (fcntl (i, F_GETFL) > -1);
+
+ /* Close the remmaining but the last one. */
+diff --git a/posix/tst-spawn5.c b/posix/tst-spawn5.c
+index ac66738..a95199a 100644
+--- a/posix/tst-spawn5.c
++++ b/posix/tst-spawn5.c
+@@ -48,17 +48,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)
+ {
+ char *endptr;
+@@ -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 dccb618..f5069d1 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 ();
+
+@@ -200,7 +189,7 @@ close_range_unshare_test (void)
+
+ support_stack_free (&stack);
+
+- for (int i = 0; i < NFDS; i++)
++ for (int i = lowfd; i < lowfd + NFDS; i++)
+ TEST_VERIFY (fcntl (i, F_GETFL) > -1);
+
+ support_descriptors_check (descrs2);
+@@ -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;
+
+@@ -251,13 +240,13 @@ close_range_cloexec_test (void)
+ /* Create some gaps, close up to a threshold, and check result. */
+ static int gap_close[] = { 57, 78, 81, 82, 84, 90 };
+ for (int i = 0; i < array_length (gap_close); i++)
+- xclose (gap_close[i]);
++ xclose (lowfd + gap_close[i]);
+
+ TEST_COMPARE (close_range (half_fd + 1, gap_1, CLOSE_RANGE_CLOEXEC), 0);
+ for (int i = half_fd + 1; i < gap_1; i++)
+ {
+ int flags = fcntl (i, F_GETFD);
+- if (is_in_array (gap_close, array_length (gap_close), i))
++ if (is_in_array (gap_close, array_length (gap_close), i - lowfd))
+ TEST_COMPARE (flags, -1);
+ else
+ {
+--
+1.8.3.1
+