import coreutils-8.30-12.el8
This commit is contained in:
parent
20087d8b3a
commit
17ee3c675e
1358
SOURCES/coreutils-8.30-statx.patch
Normal file
1358
SOURCES/coreutils-8.30-statx.patch
Normal file
File diff suppressed because it is too large
Load Diff
469
SOURCES/coreutils-8.30-tail-use-poll.patch
Normal file
469
SOURCES/coreutils-8.30-tail-use-poll.patch
Normal file
@ -0,0 +1,469 @@
|
||||
From 95f427178720d047316e95f44777cfdf2ecf2b46 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
|
||||
Date: Fri, 4 Jan 2019 09:29:13 -0800
|
||||
Subject: [PATCH 1/4] tail: don't exit immediately with filters on AIX
|
||||
|
||||
* src/tail.c: Fix the check_output_available check on AIX.
|
||||
Note we don't use poll for all systems as the overhead
|
||||
of adding the gnulib poll module wouldn't be worth it
|
||||
just for this single use.
|
||||
* tests/tail-2/pipe-f.sh: Fix the test which always passed
|
||||
due to only the exit code of sleep being checked.
|
||||
* NEWS: Mention the bug fix and rearrange alphabetically.
|
||||
Fixes http://bugs.gnu.org/33946
|
||||
|
||||
Upstream-commit: d5ab4cbe424e3e95140eec22ef828f50b2fb3067
|
||||
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||
---
|
||||
src/tail.c | 13 +++++++++++++
|
||||
tests/tail-2/pipe-f.sh | 5 ++++-
|
||||
2 files changed, 17 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/tail.c b/src/tail.c
|
||||
index ac001d7..d63aacc 100644
|
||||
--- a/src/tail.c
|
||||
+++ b/src/tail.c
|
||||
@@ -30,6 +30,9 @@
|
||||
#include <getopt.h>
|
||||
#include <sys/types.h>
|
||||
#include <signal.h>
|
||||
+#ifdef _AIX
|
||||
+# include <poll.h>
|
||||
+#endif
|
||||
|
||||
#include "system.h"
|
||||
#include "argmatch.h"
|
||||
@@ -335,6 +338,16 @@ named file in a way that accommodates renaming, removal and creation.\n\
|
||||
static void
|
||||
check_output_alive (void)
|
||||
{
|
||||
+#ifdef _AIX
|
||||
+ /* select on AIX was seen to give a readable event immediately. */
|
||||
+ struct pollfd pfd;
|
||||
+ pfd.fd = STDOUT_FILENO;
|
||||
+ pfd.events = POLLERR;
|
||||
+
|
||||
+ if (poll (&pfd, 1, 0) >= 0 && (pfd.revents & POLLERR))
|
||||
+ raise (SIGPIPE);
|
||||
+#endif
|
||||
+
|
||||
if (! monitor_output)
|
||||
return;
|
||||
|
||||
diff --git a/tests/tail-2/pipe-f.sh b/tests/tail-2/pipe-f.sh
|
||||
index 76b0d90..1126c93 100755
|
||||
--- a/tests/tail-2/pipe-f.sh
|
||||
+++ b/tests/tail-2/pipe-f.sh
|
||||
@@ -37,7 +37,10 @@ compare exp out || fail=1
|
||||
|
||||
# This would wait indefinitely before v8.28 due to no EPIPE being
|
||||
# generated due to no data written after the first small amount
|
||||
-timeout 10 tail -f $mode $fastpoll out | sleep .1 || fail=1
|
||||
+(returns_ 124 timeout 10 tail -n2 -f $mode $fastpoll out && touch timed_out) |
|
||||
+ sed 2q > out2
|
||||
+test -e timed_out && fail=1
|
||||
+compare exp out2 || fail=1
|
||||
|
||||
# This would wait indefinitely before v8.28 (until first write)
|
||||
(returns_ 1 timeout 10 tail -f $mode $fastpoll /dev/null >&-) || fail=1
|
||||
--
|
||||
2.31.1
|
||||
|
||||
|
||||
From 125bb79d3e9f414533b1c29237ee3f647053d0d6 Mon Sep 17 00:00:00 2001
|
||||
From: Ayappan <ayappap2@in.ibm.com>
|
||||
Date: Sun, 20 Jan 2019 00:17:33 -0800
|
||||
Subject: [PATCH 2/4] tail: fix recent ineffective AIX change
|
||||
|
||||
* src/tail.c: Fix commit v8.30-40-gd5ab4cb which was ineffective.
|
||||
Fixes http://bugs.gnu.org/33946
|
||||
|
||||
Upstream-commit: 17983b2cb3bccbb4fa69691178caddd99269bda9
|
||||
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||
---
|
||||
src/tail.c | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/tail.c b/src/tail.c
|
||||
index d63aacc..9ed6d48 100644
|
||||
--- a/src/tail.c
|
||||
+++ b/src/tail.c
|
||||
@@ -338,6 +338,9 @@ named file in a way that accommodates renaming, removal and creation.\n\
|
||||
static void
|
||||
check_output_alive (void)
|
||||
{
|
||||
+ if (! monitor_output)
|
||||
+ return;
|
||||
+
|
||||
#ifdef _AIX
|
||||
/* select on AIX was seen to give a readable event immediately. */
|
||||
struct pollfd pfd;
|
||||
@@ -346,11 +349,7 @@ check_output_alive (void)
|
||||
|
||||
if (poll (&pfd, 1, 0) >= 0 && (pfd.revents & POLLERR))
|
||||
raise (SIGPIPE);
|
||||
-#endif
|
||||
-
|
||||
- if (! monitor_output)
|
||||
- return;
|
||||
-
|
||||
+#else
|
||||
struct timeval delay;
|
||||
delay.tv_sec = delay.tv_usec = 0;
|
||||
|
||||
@@ -362,6 +361,7 @@ check_output_alive (void)
|
||||
and implies an error condition on output like broken pipe. */
|
||||
if (select (STDOUT_FILENO + 1, &rfd, NULL, NULL, &delay) == 1)
|
||||
raise (SIGPIPE);
|
||||
+#endif
|
||||
}
|
||||
|
||||
static bool
|
||||
--
|
||||
2.31.1
|
||||
|
||||
|
||||
From 7741989c3e633aa44f01d8f91332cb65a9280ba3 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
|
||||
Date: Sun, 20 Jan 2019 00:13:15 -0800
|
||||
Subject: [PATCH 3/4] tail: fix handling of broken pipes with SIGPIPE ignored
|
||||
|
||||
* init.cfg (trap_sigpipe_or_skip_): A new function refactored from...
|
||||
* tests/misc/printf-surprise.sh: ...here.
|
||||
* tests/misc/seq-epipe.sh. Likewise.
|
||||
* src/tail.c (die_pipe): Ensure we exit upon sending SIGPIPE.
|
||||
* tests/tail-2/pipe-f.sh: Ensure we exit even if SIGPIPE is ignored.
|
||||
* NEWS: Mention the bug fix.
|
||||
|
||||
Upstream-commit: fa50623394f491b975dbd7ad73193519dd721771
|
||||
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||
---
|
||||
init.cfg | 6 ++++++
|
||||
src/tail.c | 14 +++++++++++---
|
||||
tests/misc/printf-surprise.sh | 4 +---
|
||||
tests/misc/seq-epipe.sh | 4 +---
|
||||
tests/tail-2/pipe-f.sh | 19 ++++++++++++++-----
|
||||
5 files changed, 33 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/init.cfg b/init.cfg
|
||||
index b6c81ab..985c8d3 100644
|
||||
--- a/init.cfg
|
||||
+++ b/init.cfg
|
||||
@@ -613,6 +613,12 @@ mkfifo_or_skip_()
|
||||
fi
|
||||
}
|
||||
|
||||
+trap_sigpipe_or_skip_()
|
||||
+{
|
||||
+ (trap '' PIPE && yes | :) 2>&1 | grep -qF 'Broken pipe' ||
|
||||
+ skip_ 'trapping SIGPIPE is not supported'
|
||||
+}
|
||||
+
|
||||
# Disable the current test if the working directory seems to have
|
||||
# the setgid bit set.
|
||||
skip_if_setgid_()
|
||||
diff --git a/src/tail.c b/src/tail.c
|
||||
index 9ed6d48..16e0d73 100644
|
||||
--- a/src/tail.c
|
||||
+++ b/src/tail.c
|
||||
@@ -333,6 +333,14 @@ named file in a way that accommodates renaming, removal and creation.\n\
|
||||
exit (status);
|
||||
}
|
||||
|
||||
+/* Ensure exit, either with SIGPIPE or EXIT_FAILURE status. */
|
||||
+static void ATTRIBUTE_NORETURN
|
||||
+die_pipe (void)
|
||||
+{
|
||||
+ raise (SIGPIPE);
|
||||
+ exit (EXIT_FAILURE);
|
||||
+}
|
||||
+
|
||||
/* If the output has gone away, then terminate
|
||||
as we would if we had written to this output. */
|
||||
static void
|
||||
@@ -348,7 +356,7 @@ check_output_alive (void)
|
||||
pfd.events = POLLERR;
|
||||
|
||||
if (poll (&pfd, 1, 0) >= 0 && (pfd.revents & POLLERR))
|
||||
- raise (SIGPIPE);
|
||||
+ die_pipe ();
|
||||
#else
|
||||
struct timeval delay;
|
||||
delay.tv_sec = delay.tv_usec = 0;
|
||||
@@ -360,7 +368,7 @@ check_output_alive (void)
|
||||
/* readable event on STDOUT is equivalent to POLLERR,
|
||||
and implies an error condition on output like broken pipe. */
|
||||
if (select (STDOUT_FILENO + 1, &rfd, NULL, NULL, &delay) == 1)
|
||||
- raise (SIGPIPE);
|
||||
+ die_pipe ();
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1658,7 +1666,7 @@ tail_forever_inotify (int wd, struct File_spec *f, size_t n_files,
|
||||
{
|
||||
/* readable event on STDOUT is equivalent to POLLERR,
|
||||
and implies an error on output like broken pipe. */
|
||||
- raise (SIGPIPE);
|
||||
+ die_pipe ();
|
||||
}
|
||||
else
|
||||
break;
|
||||
diff --git a/tests/misc/printf-surprise.sh b/tests/misc/printf-surprise.sh
|
||||
index fd88133..acac0b1 100755
|
||||
--- a/tests/misc/printf-surprise.sh
|
||||
+++ b/tests/misc/printf-surprise.sh
|
||||
@@ -49,9 +49,7 @@ vm=$(get_min_ulimit_v_ env $prog %20f 0) \
|
||||
# triggering the printf(3) misbehavior -- which, btw, is required by ISO C99.
|
||||
|
||||
mkfifo_or_skip_ fifo
|
||||
-
|
||||
-(trap '' PIPE && yes | :) 2>&1 | grep -qF 'Broken pipe' ||
|
||||
- skip_ 'trapping SIGPIPE is not supported'
|
||||
+trap_sigpipe_or_skip_
|
||||
|
||||
# Disable MALLOC_PERTURB_, to avoid triggering this bug
|
||||
# https://bugs.debian.org/481543#77
|
||||
diff --git a/tests/misc/seq-epipe.sh b/tests/misc/seq-epipe.sh
|
||||
index 3e89158..127d61c 100755
|
||||
--- a/tests/misc/seq-epipe.sh
|
||||
+++ b/tests/misc/seq-epipe.sh
|
||||
@@ -18,9 +18,7 @@
|
||||
|
||||
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
|
||||
print_ver_ seq
|
||||
-
|
||||
-(trap '' PIPE && yes | :) 2>&1 | grep -qF 'Broken pipe' ||
|
||||
- skip_ 'trapping SIGPIPE is not supported'
|
||||
+trap_sigpipe_or_skip_
|
||||
|
||||
# upon EPIPE with signals ignored, 'seq' should exit with an error.
|
||||
timeout 10 sh -c \
|
||||
diff --git a/tests/tail-2/pipe-f.sh b/tests/tail-2/pipe-f.sh
|
||||
index 1126c93..f734a61 100755
|
||||
--- a/tests/tail-2/pipe-f.sh
|
||||
+++ b/tests/tail-2/pipe-f.sh
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
|
||||
print_ver_ tail
|
||||
+trap_sigpipe_or_skip_
|
||||
|
||||
# Speedup the non inotify case
|
||||
fastpoll='-s.1 --max-unchanged-stats=1'
|
||||
@@ -36,11 +37,19 @@ echo bar | returns_ 1 \
|
||||
compare exp out || fail=1
|
||||
|
||||
# This would wait indefinitely before v8.28 due to no EPIPE being
|
||||
-# generated due to no data written after the first small amount
|
||||
-(returns_ 124 timeout 10 tail -n2 -f $mode $fastpoll out && touch timed_out) |
|
||||
- sed 2q > out2
|
||||
-test -e timed_out && fail=1
|
||||
-compare exp out2 || fail=1
|
||||
+# generated due to no data written after the first small amount.
|
||||
+# Also check tail exits if SIGPIPE is being ignored.
|
||||
+# Note 'trap - SIGPIPE' is ineffective if the initiating shell
|
||||
+# has ignored SIGPIPE, but that's not the normal case.
|
||||
+for disposition in '' '-'; do
|
||||
+ (trap "$disposition" PIPE;
|
||||
+ returns_ 124 timeout 10 \
|
||||
+ tail -n2 -f $mode $fastpoll out && touch timed_out) |
|
||||
+ sed 2q > out2
|
||||
+ test -e timed_out && fail=1
|
||||
+ compare exp out2 || fail=1
|
||||
+ rm -f timed_out
|
||||
+done
|
||||
|
||||
# This would wait indefinitely before v8.28 (until first write)
|
||||
(returns_ 1 timeout 10 tail -f $mode $fastpoll /dev/null >&-) || fail=1
|
||||
--
|
||||
2.31.1
|
||||
|
||||
|
||||
From 0f5760466d167e955d28a1250ffd0af347d48dc9 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Eggert <eggert@cs.ucla.edu>
|
||||
Date: Sat, 26 Jun 2021 18:23:52 -0700
|
||||
Subject: [PATCH 4/4] tail: use poll, not select
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This fixes an unlikely stack out-of-bounds write reported by
|
||||
Stepan Broz via Kamil Dudka (Bug#49209).
|
||||
* src/tail.c: Do not include <sys/select.h>.
|
||||
[!_AIX]: Include poll.h.
|
||||
(check_output_alive) [!_AIX]: Use poll instead of select.
|
||||
(tail_forever_inotify): Likewise. Simplify logic, as there is no
|
||||
need for a ‘while (len <= evbuf_off)’ loop.
|
||||
|
||||
Upstream-commit: da0d448bca62c6305fc432f67e2c5ccc2da75346
|
||||
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||
---
|
||||
src/tail.c | 101 +++++++++++++++++++++--------------------------------
|
||||
1 file changed, 39 insertions(+), 62 deletions(-)
|
||||
|
||||
diff --git a/src/tail.c b/src/tail.c
|
||||
index 16e0d73..d77c660 100644
|
||||
--- a/src/tail.c
|
||||
+++ b/src/tail.c
|
||||
@@ -29,10 +29,8 @@
|
||||
#include <assert.h>
|
||||
#include <getopt.h>
|
||||
#include <sys/types.h>
|
||||
+#include <poll.h>
|
||||
#include <signal.h>
|
||||
-#ifdef _AIX
|
||||
-# include <poll.h>
|
||||
-#endif
|
||||
|
||||
#include "system.h"
|
||||
#include "argmatch.h"
|
||||
@@ -55,8 +53,6 @@
|
||||
#if HAVE_INOTIFY
|
||||
# include "hash.h"
|
||||
# include <sys/inotify.h>
|
||||
-/* 'select' is used by tail_forever_inotify. */
|
||||
-# include <sys/select.h>
|
||||
|
||||
/* inotify needs to know if a file is local. */
|
||||
# include "fs.h"
|
||||
@@ -349,27 +345,12 @@ check_output_alive (void)
|
||||
if (! monitor_output)
|
||||
return;
|
||||
|
||||
-#ifdef _AIX
|
||||
- /* select on AIX was seen to give a readable event immediately. */
|
||||
struct pollfd pfd;
|
||||
pfd.fd = STDOUT_FILENO;
|
||||
pfd.events = POLLERR;
|
||||
|
||||
if (poll (&pfd, 1, 0) >= 0 && (pfd.revents & POLLERR))
|
||||
die_pipe ();
|
||||
-#else
|
||||
- struct timeval delay;
|
||||
- delay.tv_sec = delay.tv_usec = 0;
|
||||
-
|
||||
- fd_set rfd;
|
||||
- FD_ZERO (&rfd);
|
||||
- FD_SET (STDOUT_FILENO, &rfd);
|
||||
-
|
||||
- /* readable event on STDOUT is equivalent to POLLERR,
|
||||
- and implies an error condition on output like broken pipe. */
|
||||
- if (select (STDOUT_FILENO + 1, &rfd, NULL, NULL, &delay) == 1)
|
||||
- die_pipe ();
|
||||
-#endif
|
||||
}
|
||||
|
||||
static bool
|
||||
@@ -1609,7 +1590,7 @@ tail_forever_inotify (int wd, struct File_spec *f, size_t n_files,
|
||||
/* Wait for inotify events and handle them. Events on directories
|
||||
ensure that watched files can be re-added when following by name.
|
||||
This loop blocks on the 'safe_read' call until a new event is notified.
|
||||
- But when --pid=P is specified, tail usually waits via the select. */
|
||||
+ But when --pid=P is specified, tail usually waits via poll. */
|
||||
while (1)
|
||||
{
|
||||
struct File_spec *fspec;
|
||||
@@ -1626,54 +1607,51 @@ tail_forever_inotify (int wd, struct File_spec *f, size_t n_files,
|
||||
return false;
|
||||
}
|
||||
|
||||
- /* When watching a PID, ensure that a read from WD will not block
|
||||
- indefinitely. */
|
||||
- while (len <= evbuf_off)
|
||||
+ if (len <= evbuf_off)
|
||||
{
|
||||
- struct timeval delay; /* how long to wait for file changes. */
|
||||
+ /* Poll for inotify events. When watching a PID, ensure
|
||||
+ that a read from WD will not block indefinitely.
|
||||
+ If MONITOR_OUTPUT, also poll for a broken output pipe. */
|
||||
|
||||
- if (pid)
|
||||
+ int file_change;
|
||||
+ struct pollfd pfd[2];
|
||||
+ do
|
||||
{
|
||||
- if (writer_is_dead)
|
||||
- exit (EXIT_SUCCESS);
|
||||
+ /* How many ms to wait for changes. -1 means wait forever. */
|
||||
+ int delay = -1;
|
||||
|
||||
- writer_is_dead = (kill (pid, 0) != 0 && errno != EPERM);
|
||||
-
|
||||
- if (writer_is_dead)
|
||||
- delay.tv_sec = delay.tv_usec = 0;
|
||||
- else
|
||||
+ if (pid)
|
||||
{
|
||||
- delay.tv_sec = (time_t) sleep_interval;
|
||||
- delay.tv_usec = 1000000 * (sleep_interval - delay.tv_sec);
|
||||
+ if (writer_is_dead)
|
||||
+ exit (EXIT_SUCCESS);
|
||||
+
|
||||
+ writer_is_dead = (kill (pid, 0) != 0 && errno != EPERM);
|
||||
+
|
||||
+ if (writer_is_dead || sleep_interval <= 0)
|
||||
+ delay = 0;
|
||||
+ else if (sleep_interval < INT_MAX / 1000 - 1)
|
||||
+ {
|
||||
+ /* delay = ceil (sleep_interval * 1000), sans libm. */
|
||||
+ double ddelay = sleep_interval * 1000;
|
||||
+ delay = ddelay;
|
||||
+ delay += delay < ddelay;
|
||||
+ }
|
||||
}
|
||||
+
|
||||
+ pfd[0].fd = wd;
|
||||
+ pfd[0].events = POLLIN;
|
||||
+ pfd[1].fd = STDOUT_FILENO;
|
||||
+ pfd[1].events = pfd[1].revents = 0;
|
||||
+ file_change = poll (pfd, monitor_output + 1, delay);
|
||||
}
|
||||
+ while (file_change == 0);
|
||||
|
||||
- fd_set rfd;
|
||||
- FD_ZERO (&rfd);
|
||||
- FD_SET (wd, &rfd);
|
||||
- if (monitor_output)
|
||||
- FD_SET (STDOUT_FILENO, &rfd);
|
||||
-
|
||||
- int file_change = select (MAX (wd, STDOUT_FILENO) + 1,
|
||||
- &rfd, NULL, NULL, pid ? &delay: NULL);
|
||||
-
|
||||
- if (file_change == 0)
|
||||
- continue;
|
||||
- else if (file_change == -1)
|
||||
- die (EXIT_FAILURE, errno,
|
||||
- _("error waiting for inotify and output events"));
|
||||
- else if (FD_ISSET (STDOUT_FILENO, &rfd))
|
||||
- {
|
||||
- /* readable event on STDOUT is equivalent to POLLERR,
|
||||
- and implies an error on output like broken pipe. */
|
||||
- die_pipe ();
|
||||
- }
|
||||
- else
|
||||
- break;
|
||||
- }
|
||||
+ if (file_change < 0)
|
||||
+ die (EXIT_FAILURE, errno,
|
||||
+ _("error waiting for inotify and output events"));
|
||||
+ if (pfd[1].revents)
|
||||
+ die_pipe ();
|
||||
|
||||
- if (len <= evbuf_off)
|
||||
- {
|
||||
len = safe_read (wd, evbuf, evlen);
|
||||
evbuf_off = 0;
|
||||
|
||||
@@ -2434,8 +2412,7 @@ main (int argc, char **argv)
|
||||
if (forever && ignore_fifo_and_pipe (F, n_files))
|
||||
{
|
||||
/* If stdout is a fifo or pipe, then monitor it
|
||||
- so that we exit if the reader goes away.
|
||||
- Note select() on a regular file is always readable. */
|
||||
+ so that we exit if the reader goes away. */
|
||||
struct stat out_stat;
|
||||
if (fstat (STDOUT_FILENO, &out_stat) < 0)
|
||||
die (EXIT_FAILURE, errno, _("standard output"));
|
||||
--
|
||||
2.31.1
|
||||
|
72
SOURCES/coreutils-8.32-df-duplicated-entries.patch
Normal file
72
SOURCES/coreutils-8.32-df-duplicated-entries.patch
Normal file
@ -0,0 +1,72 @@
|
||||
From 0f053de4bc3ca0cfd88a42d236881dfdddb10ee9 Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Wed, 30 Jun 2021 17:53:22 +0200
|
||||
Subject: [PATCH] df: fix duplicated remote entries due to bind mounts
|
||||
|
||||
As originally reported in <https://bugzilla.redhat.com/1962515>,
|
||||
df invoked without -a printed duplicated entries for NFS mounts
|
||||
of bind mounts. This is a regression from commit v8.25-54-g1c17f61ef99,
|
||||
which introduced the use of a hash table.
|
||||
|
||||
The proposed patch makes sure that the devlist entry seen the last time
|
||||
is used for comparison when eliminating duplicated mount entries. This
|
||||
way it worked before introducing the hash table.
|
||||
|
||||
Patch co-authored by Roberto Bergantinos.
|
||||
|
||||
* src/ls.c (struct devlist): Introduce the seen_last pointer.
|
||||
(devlist_for_dev): Return the devlist entry seen the last time if found.
|
||||
(filter_mount_list): Remember the devlist entry seen the last time for
|
||||
each hashed item.
|
||||
Fixes https://bugs.gnu.org/49298
|
||||
|
||||
Upstream-commit: d6125af095c9553f38cba0696f15158f5abe4ecc
|
||||
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||
---
|
||||
src/df.c | 15 +++++++++++++--
|
||||
1 file changed, 13 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/df.c b/src/df.c
|
||||
index 7e01839..3e9247f 100644
|
||||
--- a/src/df.c
|
||||
+++ b/src/df.c
|
||||
@@ -54,6 +54,7 @@ struct devlist
|
||||
dev_t dev_num;
|
||||
struct mount_entry *me;
|
||||
struct devlist *next;
|
||||
+ struct devlist *seen_last; /* valid for hashed devlist entries only */
|
||||
};
|
||||
|
||||
/* Filled with device numbers of examined file systems to avoid
|
||||
@@ -689,7 +690,13 @@ devlist_for_dev (dev_t dev)
|
||||
return NULL;
|
||||
struct devlist dev_entry;
|
||||
dev_entry.dev_num = dev;
|
||||
- return hash_lookup (devlist_table, &dev_entry);
|
||||
+
|
||||
+ struct devlist *found = hash_lookup (devlist_table, &dev_entry);
|
||||
+ if (found == NULL)
|
||||
+ return NULL;
|
||||
+
|
||||
+ /* Return the last devlist entry we have seen with this dev_num */
|
||||
+ return found->seen_last;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -807,8 +814,12 @@ filter_mount_list (bool devices_only)
|
||||
devlist->dev_num = buf.st_dev;
|
||||
devlist->next = device_list;
|
||||
device_list = devlist;
|
||||
- if (hash_insert (devlist_table, devlist) == NULL)
|
||||
+
|
||||
+ struct devlist *hash_entry = hash_insert (devlist_table, devlist);
|
||||
+ if (hash_entry == NULL)
|
||||
xalloc_die ();
|
||||
+ /* Ensure lookups use this latest devlist. */
|
||||
+ hash_entry->seen_last = devlist;
|
||||
|
||||
me = me->me_next;
|
||||
}
|
||||
--
|
||||
2.31.1
|
||||
|
38
SOURCES/coreutils-8.32-fuse-portal.patch
Normal file
38
SOURCES/coreutils-8.32-fuse-portal.patch
Normal file
@ -0,0 +1,38 @@
|
||||
From 602fb566468d3837b7871c17a0fab1a20228d119 Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Mon, 7 Jun 2021 14:43:03 +0200
|
||||
Subject: [PATCH] mountlist: recognize fuse.portal as dummy file system
|
||||
|
||||
This was originally proposed at:
|
||||
|
||||
https://lists.gnu.org/archive/html/bug-gnulib/2021-02/msg00053.html
|
||||
|
||||
As the full review might take some time, would it be possible to apply
|
||||
at least the part related to fuse.portal file systems? They started to
|
||||
cause problems recently:
|
||||
|
||||
https://bugs.launchpad.net/ubuntu/+source/xdg-desktop-portal/+bug/1905623
|
||||
https://github.com/muesli/duf/issues/35
|
||||
https://bugzilla.redhat.com/1913358
|
||||
|
||||
Upstream-commit: 9a38d499ca16f2f4304992eb1ab0894cd0b478e1
|
||||
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||
---
|
||||
lib/mountlist.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/lib/mountlist.c b/lib/mountlist.c
|
||||
index e0227b7..e5f6b07 100644
|
||||
--- a/lib/mountlist.c
|
||||
+++ b/lib/mountlist.c
|
||||
@@ -173,6 +173,7 @@
|
||||
|| strcmp (Fs_type, "debugfs") == 0 \
|
||||
|| strcmp (Fs_type, "devpts") == 0 \
|
||||
|| strcmp (Fs_type, "fusectl") == 0 \
|
||||
+ || strcmp (Fs_type, "fuse.portal") == 0 \
|
||||
|| strcmp (Fs_type, "mqueue") == 0 \
|
||||
|| strcmp (Fs_type, "rpc_pipefs") == 0 \
|
||||
|| strcmp (Fs_type, "sysfs") == 0 \
|
||||
--
|
||||
2.31.1
|
||||
|
109
SOURCES/coreutils-8.32-rm-stray-skip.patch
Normal file
109
SOURCES/coreutils-8.32-rm-stray-skip.patch
Normal file
@ -0,0 +1,109 @@
|
||||
From 11b37b65d08c2a8b6d967fd866ebbdbe7e864949 Mon Sep 17 00:00:00 2001
|
||||
From: Nishant Nayan <nishant.nayan@oracle.com>
|
||||
Date: Thu, 26 Nov 2020 14:35:17 +0000
|
||||
Subject: [PATCH] rm: do not skip files upon failure to remove an empty dir
|
||||
|
||||
When removing a directory fails for some reason, and that directory
|
||||
is empty, the rm_fts code gets the return value of the excise call
|
||||
confused with the return value of its earlier call to prompt,
|
||||
causing fts_skip_tree to be called again and the next file
|
||||
that rm would otherwise have deleted to survive.
|
||||
|
||||
* src/remove.c (rm_fts): Ensure we only skip a single fts entry,
|
||||
when processing empty dirs. I.e. only skip the entry
|
||||
having successfully removed it.
|
||||
* tests/rm/empty-immutable-skip.sh: New root-only test.
|
||||
* tests/local.mk: Add it.
|
||||
* NEWS: Mention the bug fix.
|
||||
Fixes https://bugs.gnu.org/44883
|
||||
|
||||
Upstream-commit: 6bf108358a6104ec1c694c9530b3cd56b95f4b57
|
||||
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||
---
|
||||
src/remove.c | 3 ++-
|
||||
tests/local.mk | 1 +
|
||||
tests/rm/empty-immutable-skip.sh | 46 ++++++++++++++++++++++++++++++++
|
||||
3 files changed, 49 insertions(+), 1 deletion(-)
|
||||
create mode 100755 tests/rm/empty-immutable-skip.sh
|
||||
|
||||
diff --git a/src/remove.c b/src/remove.c
|
||||
index 2d40c55..adf9489 100644
|
||||
--- a/src/remove.c
|
||||
+++ b/src/remove.c
|
||||
@@ -506,7 +506,8 @@ rm_fts (FTS *fts, FTSENT *ent, struct rm_options const *x)
|
||||
/* When we know (from prompt when in interactive mode)
|
||||
that this is an empty directory, don't prompt twice. */
|
||||
s = excise (fts, ent, x, true);
|
||||
- fts_skip_tree (fts, ent);
|
||||
+ if (s == RM_OK)
|
||||
+ fts_skip_tree (fts, ent);
|
||||
}
|
||||
|
||||
if (s != RM_OK)
|
||||
diff --git a/tests/local.mk b/tests/local.mk
|
||||
index 5f7f775..2aeff2b 100644
|
||||
--- a/tests/local.mk
|
||||
+++ b/tests/local.mk
|
||||
@@ -136,6 +136,7 @@ all_root_tests = \
|
||||
tests/rm/no-give-up.sh \
|
||||
tests/rm/one-file-system.sh \
|
||||
tests/rm/read-only.sh \
|
||||
+ tests/rm/empty-immutable-skip.sh \
|
||||
tests/tail-2/append-only.sh \
|
||||
tests/tail-2/end-of-device.sh \
|
||||
tests/touch/now-owned-by-other.sh
|
||||
diff --git a/tests/rm/empty-immutable-skip.sh b/tests/rm/empty-immutable-skip.sh
|
||||
new file mode 100755
|
||||
index 0000000..c91d8d4
|
||||
--- /dev/null
|
||||
+++ b/tests/rm/empty-immutable-skip.sh
|
||||
@@ -0,0 +1,46 @@
|
||||
+#!/bin/sh
|
||||
+# Ensure that rm does not skip extra files after hitting an empty immutable dir.
|
||||
+# Requires root access to do chattr +i, as well as an ext[23] or xfs file system
|
||||
+
|
||||
+# Copyright (C) 2020 Free Software Foundation, Inc.
|
||||
+
|
||||
+# 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 <https://www.gnu.org/licenses/>.
|
||||
+
|
||||
+. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
|
||||
+print_ver_ rm
|
||||
+require_root_
|
||||
+
|
||||
+# These simple one-file operations are expected to work even in the
|
||||
+# presence of this bug, and we need them to set up the rest of the test.
|
||||
+chattr_i_works=1
|
||||
+touch f
|
||||
+chattr +i f 2>/dev/null || chattr_i_works=0
|
||||
+rm f 2>/dev/null
|
||||
+test -f f || chattr_i_works=0
|
||||
+chattr -i f 2>/dev/null || chattr_i_works=0
|
||||
+rm f 2>/dev/null || chattr_i_works=0
|
||||
+test -f f && chattr_i_works=0
|
||||
+
|
||||
+if test $chattr_i_works = 0; then
|
||||
+ skip_ "chattr +i doesn't work on this file system"
|
||||
+fi
|
||||
+
|
||||
+mkdir empty || framework_failure_
|
||||
+touch x y || framework_failure_
|
||||
+chattr +i empty || framework_failure_
|
||||
+rm -rf empty x y
|
||||
+{ test -f x || test -f y; } && fail=1
|
||||
+chattr -i empty
|
||||
+
|
||||
+Exit $fail
|
||||
--
|
||||
2.26.2
|
||||
|
100
SOURCES/coreutils-8.32-split-number.patch
Normal file
100
SOURCES/coreutils-8.32-split-number.patch
Normal file
@ -0,0 +1,100 @@
|
||||
From bb0e7fabcaed9a7e71e30f05e638e9f243cdb13e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
|
||||
Date: Mon, 25 Jan 2021 14:12:48 +0000
|
||||
Subject: [PATCH] split: fix --number=K/N to output correct part of file
|
||||
|
||||
This functionality regressed with the adjustments
|
||||
in commit v8.25-4-g62e7af032
|
||||
|
||||
* src/split.c (bytes_chunk_extract): Account for already read data
|
||||
when seeking into the file.
|
||||
* tests/split/b-chunk.sh: Use the hidden ---io-blksize option,
|
||||
to test this functionality.
|
||||
Fixes https://bugs.gnu.org/46048
|
||||
|
||||
Upstream-commit: bb21daa125aeb4e32546309d370918ca47e612db
|
||||
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||
---
|
||||
src/split.c | 2 +-
|
||||
tests/split/b-chunk.sh | 45 ++++++++++++++++++++++++------------------
|
||||
2 files changed, 27 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/src/split.c b/src/split.c
|
||||
index 09e610b..19248f6 100644
|
||||
--- a/src/split.c
|
||||
+++ b/src/split.c
|
||||
@@ -1001,7 +1001,7 @@ bytes_chunk_extract (uintmax_t k, uintmax_t n, char *buf, size_t bufsize,
|
||||
}
|
||||
else
|
||||
{
|
||||
- if (lseek (STDIN_FILENO, start, SEEK_CUR) < 0)
|
||||
+ if (lseek (STDIN_FILENO, start - initial_read, SEEK_CUR) < 0)
|
||||
die (EXIT_FAILURE, errno, "%s", quotef (infile));
|
||||
initial_read = SIZE_MAX;
|
||||
}
|
||||
diff --git a/tests/split/b-chunk.sh b/tests/split/b-chunk.sh
|
||||
index 864ce55..39a6799 100755
|
||||
--- a/tests/split/b-chunk.sh
|
||||
+++ b/tests/split/b-chunk.sh
|
||||
@@ -35,32 +35,39 @@ split -e -n 10 /dev/null || fail=1
|
||||
returns_ 1 stat x?? 2>/dev/null || fail=1
|
||||
|
||||
printf '1\n2\n3\n4\n5\n' > input || framework_failure_
|
||||
+printf '1\n2' > exp-1 || framework_failure_
|
||||
+printf '\n3\n' > exp-2 || framework_failure_
|
||||
+printf '4\n5\n' > exp-3 || framework_failure_
|
||||
|
||||
for file in input /proc/version /sys/kernel/profiling; do
|
||||
test -f $file || continue
|
||||
|
||||
- split -n 3 $file > out || fail=1
|
||||
- split -n 1/3 $file > b1 || fail=1
|
||||
- split -n 2/3 $file > b2 || fail=1
|
||||
- split -n 3/3 $file > b3 || fail=1
|
||||
+ for blksize in 1 2 4096; do
|
||||
+ if ! test "$file" = 'input'; then
|
||||
+ # For /proc like files we must be able to read all
|
||||
+ # into the internal buffer to be able to determine size.
|
||||
+ test "$blksize" = 4096 || continue
|
||||
+ fi
|
||||
|
||||
- case $file in
|
||||
- input)
|
||||
- printf '1\n2' > exp-1
|
||||
- printf '\n3\n' > exp-2
|
||||
- printf '4\n5\n' > exp-3
|
||||
+ split -n 3 ---io-blksize=$blksize $file > out || fail=1
|
||||
+ split -n 1/3 ---io-blksize=$blksize $file > b1 || fail=1
|
||||
+ split -n 2/3 ---io-blksize=$blksize $file > b2 || fail=1
|
||||
+ split -n 3/3 ---io-blksize=$blksize $file > b3 || fail=1
|
||||
|
||||
- compare exp-1 xaa || fail=1
|
||||
- compare exp-2 xab || fail=1
|
||||
- compare exp-3 xac || fail=1
|
||||
- ;;
|
||||
- esac
|
||||
+ case $file in
|
||||
+ input)
|
||||
+ compare exp-1 xaa || fail=1
|
||||
+ compare exp-2 xab || fail=1
|
||||
+ compare exp-3 xac || fail=1
|
||||
+ ;;
|
||||
+ esac
|
||||
|
||||
- compare xaa b1 || fail=1
|
||||
- compare xab b2 || fail=1
|
||||
- compare xac b3 || fail=1
|
||||
- cat xaa xab xac | compare - $file || fail=1
|
||||
- test -f xad && fail=1
|
||||
+ compare xaa b1 || fail=1
|
||||
+ compare xab b2 || fail=1
|
||||
+ compare xac b3 || fail=1
|
||||
+ cat xaa xab xac | compare - $file || fail=1
|
||||
+ test -f xad && fail=1
|
||||
+ done
|
||||
done
|
||||
|
||||
Exit $fail
|
||||
--
|
||||
2.26.2
|
||||
|
@ -1,7 +1,7 @@
|
||||
Summary: A set of basic GNU tools commonly used in shell scripts
|
||||
Name: coreutils
|
||||
Version: 8.30
|
||||
Release: 8%{?dist}
|
||||
Release: 12%{?dist}
|
||||
License: GPLv3+
|
||||
Group: System Environment/Base
|
||||
Url: https://www.gnu.org/software/coreutils/
|
||||
@ -35,6 +35,24 @@ Patch6: coreutils-8.31-sums-man-pages.patch
|
||||
# df --local: recognize afs, auristorfs, and smb3 as remote fs (#1798030)
|
||||
Patch7: coreutils-8.30-df-local-fs.patch
|
||||
|
||||
# use statx instead of stat when available (#1760300)
|
||||
Patch8: coreutils-8.30-statx.patch
|
||||
|
||||
# rm: do not skip files upon failure to remove an empty dir (#1905481)
|
||||
Patch9: coreutils-8.32-rm-stray-skip.patch
|
||||
|
||||
# split: fix --number=K/N to output correct part of file (#1921246)
|
||||
Patch10: coreutils-8.32-split-number.patch
|
||||
|
||||
# mountlist: recognize fuse.portal as dummy file system (#1952714)
|
||||
Patch11: coreutils-8.32-fuse-portal.patch
|
||||
|
||||
# tail: fix stack out-of-bounds write with --follow (#1974784)
|
||||
Patch12: coreutils-8.30-tail-use-poll.patch
|
||||
|
||||
# df: fix duplicated remote entries due to bind mounts (#1962515)
|
||||
Patch17: coreutils-8.32-df-duplicated-entries.patch
|
||||
|
||||
# disable the test-lock gnulib test prone to deadlock
|
||||
Patch100: coreutils-8.26-test-lock.patch
|
||||
|
||||
@ -268,6 +286,20 @@ fi
|
||||
%license COPYING
|
||||
|
||||
%changelog
|
||||
* Wed Jul 07 2021 Kamil Dudka <kdudka@redhat.com> - 8.30-12
|
||||
- df: fix duplicated remote entries due to bind mounts (#1962515)
|
||||
|
||||
* Thu Jul 01 2021 Kamil Dudka <kdudka@redhat.com> - 8.30-11
|
||||
- tail: fix stack out-of-bounds write with --follow (#1974784)
|
||||
|
||||
* Tue Jun 08 2021 Kamil Dudka <kdudka@redhat.com> - 8.30-10
|
||||
- mountlist: recognize fuse.portal as dummy file system (#1952714)
|
||||
|
||||
* Fri Mar 26 2021 Kamil Dudka <kdudka@redhat.com> - 8.30-9
|
||||
- split: fix --number=K/N to output correct part of file (#1921246)
|
||||
- rm: do not skip files upon failure to remove an empty dir (#1905481)
|
||||
- use statx instead of stat when available (#1760300)
|
||||
|
||||
* Tue Apr 14 2020 Kamil Dudka <kdudka@redhat.com> - 8.30-8
|
||||
- df --local: recognize afs, auristorfs, and smb3 as remote fs (#1798030)
|
||||
- fix formatting of sha512sum(1) man page (#1688744)
|
||||
|
Loading…
Reference in New Issue
Block a user