commit:     35badf1f86696e71ae84d9437b250d8ae0192242
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Jan  6 07:01:13 2026 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Jan  6 07:14:26 2026 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=35badf1f

sys-apps/coreutils: fix cp SEEK_HOLE hang

Closes: https://bugs.gentoo.org/968414
Signed-off-by: Sam James <sam <AT> gentoo.org>

 ...tils-9.9-r10.ebuild => coreutils-9.9-r1.ebuild} |  9 +++---
 ...ils-9.9-r10.ebuild => coreutils-9.9-r11.ebuild} |  1 +
 .../files/coreutils-9.9-cp-SEEK_HOLE-loop.patch    | 37 ++++++++++++++++++++++
 3 files changed, 43 insertions(+), 4 deletions(-)

diff --git a/sys-apps/coreutils/coreutils-9.9-r10.ebuild 
b/sys-apps/coreutils/coreutils-9.9-r1.ebuild
similarity index 96%
copy from sys-apps/coreutils/coreutils-9.9-r10.ebuild
copy to sys-apps/coreutils/coreutils-9.9-r1.ebuild
index 331293db8eb4..fd1394f55a01 100644
--- a/sys-apps/coreutils/coreutils-9.9-r10.ebuild
+++ b/sys-apps/coreutils/coreutils-9.9-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=8
@@ -33,7 +33,7 @@ else
                verify-sig? ( mirror://gnu/${PN}/${P}.tar.xz.sig )
        "
 
-       #KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc 
~ppc64 ~riscv ~s390 ~sparc ~x86"
+       KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc 
~ppc64 ~riscv ~s390 ~sparc ~x86"
 fi
 
 SRC_URI+=" !vanilla? ( 
https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${MY_PATCH}.tar.xz )"
@@ -83,7 +83,6 @@ RDEPEND+="
        !sys-apps/mktemp
        !<app-forensics/tct-1.18-r1
        !<net-fs/netatalk-2.0.3-r4
-       !<sys-apps/shadow-4.19.0_rc1
 "
 
 QA_CONFIG_IMPL_DECL_SKIP=(
@@ -118,6 +117,7 @@ src_prepare() {
        local PATCHES=(
                "${FILESDIR}"/${PN}-9.5-skip-readutmp-test.patch
                # Upstream patches
+               "${FILESDIR}"/${PN}-9.9-cp-SEEK_HOLE-loop.patch
        )
 
        if ! use vanilla && [[ -d "${WORKDIR}"/${MY_PATCH} ]] ; then
@@ -159,9 +159,10 @@ src_configure() {
                --with-packager-version="${PVR} (p${PATCH_VER:-0})"
                --with-packager-bug-reports="https://bugs.gentoo.org/";
                # kill/uptime - procps
+               # groups/su   - shadow
                # hostname    - net-tools
                --enable-install-program="arch,$(usev hostname),$(usev kill)"
-               --enable-no-install-program="$(usev !hostname),$(usev 
!kill),su,uptime"
+               --enable-no-install-program="groups,$(usev !hostname),$(usev 
!kill),su,uptime"
                $(usev !caps --disable-libcap)
                $(use_enable nls)
                $(use_enable acl)

diff --git a/sys-apps/coreutils/coreutils-9.9-r10.ebuild 
b/sys-apps/coreutils/coreutils-9.9-r11.ebuild
similarity index 99%
rename from sys-apps/coreutils/coreutils-9.9-r10.ebuild
rename to sys-apps/coreutils/coreutils-9.9-r11.ebuild
index 331293db8eb4..7cd6e5cab97d 100644
--- a/sys-apps/coreutils/coreutils-9.9-r10.ebuild
+++ b/sys-apps/coreutils/coreutils-9.9-r11.ebuild
@@ -118,6 +118,7 @@ src_prepare() {
        local PATCHES=(
                "${FILESDIR}"/${PN}-9.5-skip-readutmp-test.patch
                # Upstream patches
+               "${FILESDIR}"/${PN}-9.9-cp-SEEK_HOLE-loop.patch
        )
 
        if ! use vanilla && [[ -d "${WORKDIR}"/${MY_PATCH} ]] ; then

diff --git a/sys-apps/coreutils/files/coreutils-9.9-cp-SEEK_HOLE-loop.patch 
b/sys-apps/coreutils/files/coreutils-9.9-cp-SEEK_HOLE-loop.patch
new file mode 100644
index 000000000000..f38b1bc06e0c
--- /dev/null
+++ b/sys-apps/coreutils/files/coreutils-9.9-cp-SEEK_HOLE-loop.patch
@@ -0,0 +1,37 @@
+https://bugs.gentoo.org/968414
+https://cgit.git.savannah.gnu.org/cgit/coreutils.git/commit/?id=bd528f923482223649aa84be7d131e69356149da
+
+From bd528f923482223649aa84be7d131e69356149da Mon Sep 17 00:00:00 2001
+From: Pádraig Brady <[email protected]>
+Date: Sun, 4 Jan 2026 12:45:46 +0000
+Subject: copy: fix possible infinite loop with SEEK_HOLE
+
+Commit v9.8-95-g4c0cf3864 intended to initialize
+ext_start to src_pos, as was described at:
+https://lists.gnu.org/r/coreutils/2025-11/msg00035.html
+However ipos was inadvertently used, which is only
+valid the first time through the loop.
+
+* src/copy-file-data.c (lseek_copy): Use scan_inference->hole_start
+only with the initial offset passed to lseek_copy().
+* NEWS: Mention the bug fix.
+Reported at https://github.com/coreutils/coreutils/issues/159
+---
+ src/copy-file-data.c | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+--- a/src/copy-file-data.c
++++ b/src/copy-file-data.c
+@@ -338,7 +338,7 @@ lseek_copy (int src_fd, int dest_fd, char **abuf, idx_t 
buf_size,
+   for (off_t ext_start = scan_inference->ext_start;
+        0 <= ext_start && ext_start < max_ipos; )
+     {
+-      off_t ext_end = (ext_start == ipos
++      off_t ext_end = (ext_start == src_pos
+                        ? scan_inference->hole_start
+                        : lseek (src_fd, ext_start, SEEK_HOLE));
+       if (0 <= ext_end)
+-- 
+cgit v1.2.3
+
+

Reply via email to