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 <lexi@hemlock.eden.le-fay.org>
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
Differential revision:	https://reviews.freebsd.org/D49094
This commit is contained in:
Konstantin Belousov 2025-02-21 15:07:43 +02:00
parent d40daefca6
commit e59991206b

View file

@ -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: