aboutsummaryrefslogtreecommitdiff
path: root/sbin/mount
diff options
context:
space:
mode:
authorKirk McKusick <mckusick@FreeBSD.org>2023-01-29 23:12:48 +0000
committerKirk McKusick <mckusick@FreeBSD.org>2023-01-29 23:14:43 +0000
commitad055467bec35885dc3eff2f4dd765f5b2f53259 (patch)
tree82513383894612575e6c5acfb957c39468d8ab16 /sbin/mount
parentea34aa4780e5a581732520ea579342af94684882 (diff)
downloadsrc-ad055467bec35885dc3eff2f4dd765f5b2f53259.tar.gz
src-ad055467bec35885dc3eff2f4dd765f5b2f53259.zip
Fix for getmntpoint(3) when checking for NFS mount points.
Only attempt to add /dev/ to f_mntfromname names that result in a valid character device. MFC after: 1 week Reported by: Bjoern A. Zeeb Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D37907
Diffstat (limited to 'sbin/mount')
-rw-r--r--sbin/mount/getmntopts.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/sbin/mount/getmntopts.c b/sbin/mount/getmntopts.c
index 7702da903749..3a5cac0d9bac 100644
--- a/sbin/mount/getmntopts.c
+++ b/sbin/mount/getmntopts.c
@@ -177,6 +177,11 @@ getmntpoint(const char *name)
mntsize = getmntinfo(&mntbuf, MNT_NOWAIT);
for (i = 0; i < mntsize; i++) {
statfsp = &mntbuf[i];
+ if (isdev == 0) {
+ if (strcmp(name, statfsp->f_mntonname))
+ continue;
+ return (statfsp);
+ }
ddevname = statfsp->f_mntfromname;
if (*ddevname != '/') {
if ((len = strlen(_PATH_DEV) + strlen(ddevname) + 1) >
@@ -185,12 +190,8 @@ getmntpoint(const char *name)
continue;
strncpy(device, _PATH_DEV, len);
strncat(device, ddevname, len);
- strncpy(statfsp->f_mntfromname, device, len);
- }
- if (isdev == 0) {
- if (strcmp(name, statfsp->f_mntonname))
- continue;
- return (statfsp);
+ if (stat(device, &mntdevstat) == 0)
+ strncpy(statfsp->f_mntfromname, device, len);
}
if (stat(ddevname, &mntdevstat) == 0 &&
mntdevstat.st_rdev == devstat.st_rdev)