diff options
author | Kirk McKusick <mckusick@FreeBSD.org> | 2023-01-29 23:12:48 +0000 |
---|---|---|
committer | Kirk McKusick <mckusick@FreeBSD.org> | 2023-01-29 23:14:43 +0000 |
commit | ad055467bec35885dc3eff2f4dd765f5b2f53259 (patch) | |
tree | 82513383894612575e6c5acfb957c39468d8ab16 /sbin/mount | |
parent | ea34aa4780e5a581732520ea579342af94684882 (diff) | |
download | src-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.c | 13 |
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) |