[findutils] Resolve: #1188498 - fix a crash triggered by recursive bind mount

Kamil Dudka kdudka at fedoraproject.org
Mon Feb 16 13:35:11 UTC 2015


commit d0e916c69954b27a293164b70faf11d32d656c93
Author: Kamil Dudka <kdudka at redhat.com>
Date:   Wed Feb 11 16:06:21 2015 +0100

    Resolve: #1188498 - fix a crash triggered by recursive bind mount

 findutils-4.5.14-fts-cycle.patch |   44 ++++++++++++++++++++++++++++++++++++++
 findutils.spec                   |    9 +++++++-
 2 files changed, 52 insertions(+), 1 deletions(-)
---
diff --git a/findutils-4.5.14-fts-cycle.patch b/findutils-4.5.14-fts-cycle.patch
new file mode 100644
index 0000000..2eb73cd
--- /dev/null
+++ b/findutils-4.5.14-fts-cycle.patch
@@ -0,0 +1,44 @@
+From bf4d8abd7ae3624a13967275dcbaea19f6b6ceb5 Mon Sep 17 00:00:00 2001
+From: Kamil Dudka <kdudka at redhat.com>
+Date: Wed, 11 Feb 2015 13:48:12 +0100
+Subject: [PATCH] fts: avoid crash when a cycle is added while traversing
+
+This could be triggered by auto-mounting a recursive bind mount.
+Reported by Michael Chapman in: https://bugzilla.redhat.com/1188498
+* lib/fts.c (fts_read): Avoid removing the original hash table item
+when leaving a directory that caused a cycle, and preserve the FTS_DC
+flag.
+
+Bug: https://bugzilla.redhat.com/1188498
+Bug: http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/34867
+---
+ gl/lib/fts.c | 13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/gl/lib/fts.c b/gl/lib/fts.c
+index 500e92c..f76c015 100644
+--- a/gl/lib/fts.c
++++ b/gl/lib/fts.c
+@@ -1091,9 +1091,16 @@ cd_dot_dot:
+                 p->fts_errno = errno;
+                 SET(FTS_STOP);
+         }
+-        p->fts_info = p->fts_errno ? FTS_ERR : FTS_DP;
+-        if (p->fts_errno == 0)
+-                LEAVE_DIR (sp, p, "3");
++
++        /* If the directory causes a cycle, preserve the FTS_DC flag and keep
++         * the corresponding dev/ino pair in the hash table.  It is going to be
++         * removed when leaving the original directory.
++         */
++        if (p->fts_info != FTS_DC) {
++            p->fts_info = p->fts_errno ? FTS_ERR : FTS_DP;
++            if (p->fts_errno == 0)
++                    LEAVE_DIR (sp, p, "3");
++        }
+         return ISSET(FTS_STOP) ? NULL : p;
+ }
+ 
+-- 
+2.1.0
+
diff --git a/findutils.spec b/findutils.spec
index fe763d8..182711a 100644
--- a/findutils.spec
+++ b/findutils.spec
@@ -1,7 +1,7 @@
 Summary: The GNU versions of find utilities (find and xargs)
 Name: findutils
 Version: 4.5.14
-Release: 2%{?dist}
+Release: 3%{?dist}
 Epoch: 1
 License: GPLv3+
 Group: Applications/File
@@ -11,6 +11,9 @@ Source0: ftp://alpha.gnu.org/gnu/findutils/%{name}-%{version}.tar.gz
 # do not build locate
 Patch1: findutils-4.4.0-no-locate.patch
 
+# fix a crash triggered by recursive bind mount (#1188498)
+Patch2: findutils-4.5.14-fts-cycle.patch
+
 # add a new option -xautofs to find to not descend into directories on autofs
 # file systems
 Patch3: findutils-4.4.2-xautofs.patch
@@ -48,6 +51,7 @@ useful for finding things on your system.
 %setup -q
 rm -rf locate
 %patch1 -p1
+%patch2 -p1
 %patch3 -p1
 %patch4 -p1
 %patch5 -p1
@@ -99,6 +103,9 @@ fi
 %{_infodir}/find-maint.info.gz
 
 %changelog
+* Mon Feb 16 2015 Kamil Dudka <kdudka at redhat.com> - 1:4.5.14-3
+- fix a crash triggered by recursive bind mount (#1188498)
+
 * Sat Aug 16 2014 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 1:4.5.14-2
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
 


More information about the scm-commits mailing list