From 90742659d7f10996538360294868380c3fcf3ff2 Mon Sep 17 00:00:00 2001 From: Pawel Jakub Dawidek Date: Wed, 18 Jan 2006 11:00:34 +0000 Subject: [PATCH] Resolve the mount point's path with realpath(2) before checking if file system is mounted. This prevevents duplicated mounts. The change I made against the original patch is to fall back to the given path on realpath(2) failure instead of exiting with an error. Submitted by: Andreas Kohn PR: bin/89782 MFC after: 3 days --- sbin/mount/mount.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sbin/mount/mount.c b/sbin/mount/mount.c index eb326160874f..5f4989395060 100644 --- a/sbin/mount/mount.c +++ b/sbin/mount/mount.c @@ -391,14 +391,21 @@ main(int argc, char *argv[]) int ismounted(struct fstab *fs, struct statfs *mntbuf, int mntsize) { + char realfsfile[PATH_MAX]; int i; if (fs->fs_file[0] == '/' && fs->fs_file[1] == '\0') /* the root file system can always be remounted */ return (0); + /* The user may have specified a symlink in fstab, resolve the path */ + if (realpath(fs->fs_file, realfsfile) == NULL) { + /* Cannot resolve the path, use original one */ + strlcpy(realfsfile, fs->fs_file, sizeof(realfsfile)); + } + for (i = mntsize - 1; i >= 0; --i) - if (strcmp(fs->fs_file, mntbuf[i].f_mntonname) == 0 && + if (strcmp(realfsfile, mntbuf[i].f_mntonname) == 0 && (!isremountable(fs->fs_vfstype) || strcmp(fs->fs_spec, mntbuf[i].f_mntfromname) == 0)) return (1);