On 2/26/25 07:36, Ronald Klop wrote:

*Van:* Konstantin Belousov <k...@freebsd.org>
*Datum:* 25 februari 2025 08:20
*Aan:* src-committ...@freebsd.org, dev-commits-src-all@FreeBSD.org, dev- commits-src-m...@freebsd.org *Onderwerp:* git: e59991206b14 - main - fts(3): be less strict when automount does its job under us walking autofs mount

    The branch main has been updated by kib:

    URL: https://cgit.FreeBSD.org/src/commit/?
    id=e59991206b1463b7e85cc8aafde7f1dc03fcedcf <https://
    cgit.FreeBSD.org/src/commit/?
    id=e59991206b1463b7e85cc8aafde7f1dc03fcedcf>

    commit e59991206b1463b7e85cc8aafde7f1dc03fcedcf
    Author:     Konstantin Belousov
    AuthorDate: 2025-02-21 13:07:43 +0000
    Commit:     Konstantin Belousov
    CommitDate: 2025-02-25 07:09:29 +0000

         fts(3): be less strict when automount does its job under us
    walking autofs mount

         Namely, allow the file id change if the resulting file belongs to
         automounted filesystem.  If it is, remember the updated id.

         This allows the ids from the automounted volumes to change without
         restrictions, might be a further refinement would be to only
    allow such
         inconsistency once.

         PR:     284914
         Reported and tested by: Lexi Winter
         Sponsored by:   The FreeBSD Foundation
         MFC after:      1 week
         Differential revision: https://reviews.freebsd.org/D49094
    <https://reviews.freebsd.org/D49094>
    ---
      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 770a7b2cc322..bd193c7c6cfc 100644
    --- a/lib/libc/gen/fts.c
    +++ b/lib/libc/gen/fts.c
    @@ -1132,6 +1132,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))
    @@ -1144,9 +1145,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:

    ------------------------------------------------------------------------



    /* autofs might did the mount under us, accept. */


I’m not native English so forgive me my question. But what does this comment mean?


It might have triggered an autofs mount while we're running, so we just accept the otherwise suspicious looking change.

Reply via email to