diff options
author | mm <mm@FreeBSD.org> | 2012-02-05 10:59:50 +0000 |
---|---|---|
committer | mm <mm@FreeBSD.org> | 2012-02-05 10:59:50 +0000 |
commit | 8a4156df5d9d4f62778bb8a730daba476466c63d (patch) | |
tree | 8b7517824030e0ec68c67a09937e3de40f80e660 /sys/kern | |
parent | 6b68275a843448f1b144d4384f8e43f7304224e6 (diff) | |
download | FreeBSD-src-8a4156df5d9d4f62778bb8a730daba476466c63d.zip FreeBSD-src-8a4156df5d9d4f62778bb8a730daba476466c63d.tar.gz |
Analogous to r230407 a separate path buffer in vfs_mount.c is required
for r230129. Fixes a out of bounds write to fspath.
MFC after: 10 days
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/vfs_mount.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c index 5fa086c..ddc17cc 100644 --- a/sys/kern/vfs_mount.c +++ b/sys/kern/vfs_mount.c @@ -1039,6 +1039,7 @@ vfs_domount( struct vfsconf *vfsp; struct nameidata nd; struct vnode *vp; + char *pathbuf; int error; /* @@ -1102,12 +1103,15 @@ vfs_domount( NDFREE(&nd, NDF_ONLY_PNBUF); vp = nd.ni_vp; if ((fsflags & MNT_UPDATE) == 0) { - error = vn_path_to_global_path(td, vp, fspath, MNAMELEN); + pathbuf = malloc(MNAMELEN, M_TEMP, M_WAITOK); + strcpy(pathbuf, fspath); + error = vn_path_to_global_path(td, vp, pathbuf, MNAMELEN); /* debug.disablefullpath == 1 results in ENODEV */ if (error == 0 || error == ENODEV) { - error = vfs_domount_first(td, vfsp, fspath, vp, + error = vfs_domount_first(td, vfsp, pathbuf, vp, fsflags, optlist); } + free(pathbuf, M_TEMP); } else error = vfs_domount_update(td, vp, fsflags, optlist); mtx_unlock(&Giant); |