The branch stable/14 has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=9460df357344a2848f9cab07a5228cd9615800e1

commit 9460df357344a2848f9cab07a5228cd9615800e1
Author:     Konstantin Belousov <k...@freebsd.org>
AuthorDate: 2025-02-21 13:07:43 +0000
Commit:     Konstantin Belousov <k...@freebsd.org>
CommitDate: 2025-03-04 04:19:08 +0000

    fts(3): be less strict when automount does its job under us walking autofs 
mount
    
    PR:     284914
    
    (cherry picked from commit e59991206b1463b7e85cc8aafde7f1dc03fcedcf)
---
 lib/libc/gen/fts.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/lib/libc/gen/fts.c b/lib/libc/gen/fts.c
index ff51d2b224c2..a718c4e1e85c 100644
--- a/lib/libc/gen/fts.c
+++ b/lib/libc/gen/fts.c
@@ -1145,6 +1145,7 @@ fts_safe_changedir(FTS *sp, FTSENT *p, int fd, char *path)
 {
        int ret, oerrno, newfd;
        struct stat sb;
+       struct statfs sf;
 
        newfd = fd;
        if (ISSET(FTS_NOCHDIR))
@@ -1157,9 +1158,15 @@ fts_safe_changedir(FTS *sp, FTSENT *p, int fd, char 
*path)
                goto bail;
        }
        if (p->fts_dev != sb.st_dev || p->fts_ino != sb.st_ino) {
-               errno = ENOENT;         /* disinformation */
-               ret = -1;
-               goto bail;
+               if (_fstatfs(newfd, &sf) != 0 ||
+                   (sf.f_flags & MNT_AUTOMOUNTED) == 0) {
+                       errno = ENOENT;         /* disinformation */
+                       ret = -1;
+                       goto bail;
+               }
+               /* autofs might did the mount under us, accept. */
+               p->fts_dev = sb.st_dev;
+               p->fts_ino == sb.st_ino;
        }
        ret = fchdir(newfd);
 bail:

Reply via email to