Linux NFS development
 help / color / mirror / Atom feed
* mountd: Possible bug in next_mnt()
@ 2023-03-08 15:05 Richard Weinberger
  2023-03-11 16:19 ` Steve Dickson
  0 siblings, 1 reply; 8+ messages in thread
From: Richard Weinberger @ 2023-03-08 15:05 UTC (permalink / raw)
  To: linux-nfs; +Cc: trond.myklebust, chris chilvers

Hi!

next_mnt() finds submounts below a given path p.
While investigating into an issue in my crossmount patches for nfs-utils I noticed
that it does not work when fsid=root, rootdir=/some/path/ and then "/" is being exported.
In this case next_mnt() is asked to find submounts of "/" but returns none.

In my opinion this wrong because every mount is a submount of "/".

The following change fixes the problem on my side but I'm not sure whether
"/" is a special case in mountd where next_mnt() has to bail out.

diff --git a/support/export/cache.c b/support/export/cache.c
index 2497d4f48df3..be20cb34adcb 100644
--- a/support/export/cache.c
+++ b/support/export/cache.c
@@ -410,13 +410,13 @@ static char *next_mnt(void **v, char *p)
                *v = f;
        } else
                f = *v;
-       while ((me = getmntent(f)) != NULL && l > 1) {
+       while ((me = getmntent(f)) != NULL && l >= 1) {
                char *mnt_dir = nfsd_path_strip_root(me->mnt_dir);
 
                if (!mnt_dir)
                        continue;
 
-               if (strncmp(mnt_dir, p, l) == 0 && mnt_dir[l] == '/')
+               if (strncmp(mnt_dir, p, l) == 0 && (l == 1 || mnt_dir[l] == '/'))
                        return mnt_dir;
        }
        endmntent(f);

Comments? :-)

Thanks,
//richard

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2023-03-15 22:04 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-08 15:05 mountd: Possible bug in next_mnt() Richard Weinberger
2023-03-11 16:19 ` Steve Dickson
2023-03-11 16:52   ` Richard Weinberger
2023-03-12 13:31     ` Steve Dickson
2023-03-12 13:36       ` Richard Weinberger
2023-03-12 14:20         ` Steve Dickson
2023-03-12 16:51           ` Richard Weinberger
2023-03-15 22:04             ` Richard Weinberger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox