On Wed, Feb 26, 2025 at 08:03:33AM -0600, Kyle Evans wrote:
> 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.
If you have a better formulation for the comment, please go ahead and
commit. I did not wanted to give too formal explanation there, esp. due
to the notes given in the commit message.