From: Joerg Sonnenberger Date: Wed, 2 Feb 2005 21:34:19 +0000 (+0000) Subject: Don't use the statfs field f_mntonname in filesystems. For the userland X-Git-Tag: v2.0.1~8933 X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/75ffff0d6f3520361771d057b364af7f81ebb36f Don't use the statfs field f_mntonname in filesystems. For the userland export code, it can synthesized from mnt_ncp. For debugging code, use f_mntfromname, it should be enough to find culprit. The vfs_unmountall doesn't use code_fullpath to avoid problems with resource allocation and to make it more likely that a call from ddb succeds. Change getfsstat and fhstatfs to not show directories outside a chroot path, with the exception of the filesystem counting the chroot root itself. --- diff --git a/sys/emulation/linux/i386/linprocfs/linprocfs_vfsops.c b/sys/emulation/linux/i386/linprocfs/linprocfs_vfsops.c index ad9d42e851..c19c203a1b 100644 --- a/sys/emulation/linux/i386/linprocfs/linprocfs_vfsops.c +++ b/sys/emulation/linux/i386/linprocfs/linprocfs_vfsops.c @@ -39,7 +39,7 @@ * @(#)procfs_vfsops.c 8.7 (Berkeley) 5/10/95 * * $FreeBSD: src/sys/i386/linux/linprocfs/linprocfs_vfsops.c,v 1.2.2.3 2001/10/15 20:42:01 des Exp $ - * $DragonFly: src/sys/emulation/linux/i386/linprocfs/linprocfs_vfsops.c,v 1.8 2004/12/17 00:18:05 dillon Exp $ + * $DragonFly: src/sys/emulation/linux/i386/linprocfs/linprocfs_vfsops.c,v 1.9 2005/02/02 21:34:18 joerg Exp $ */ /* @@ -94,9 +94,6 @@ linprocfs_mount(mp, path, data, td) vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, linprocfs_vnodeop_entries); - (void) copyinstr(path, (caddr_t)mp->mnt_stat.f_mntonname, MNAMELEN, &size); - bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size); - size = sizeof("linprocfs") - 1; bcopy("linprocfs", mp->mnt_stat.f_mntfromname, size); bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size); @@ -159,7 +156,6 @@ linprocfs_statfs(mp, sbp, td) if (sbp != &mp->mnt_stat) { sbp->f_type = mp->mnt_vfc->vfc_typenum; bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid)); - bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN); bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN); } diff --git a/sys/kern/vfs_cache.c b/sys/kern/vfs_cache.c index ec7eecb445..412248ffa7 100644 --- a/sys/kern/vfs_cache.c +++ b/sys/kern/vfs_cache.c @@ -67,7 +67,7 @@ * * @(#)vfs_cache.c 8.5 (Berkeley) 3/22/95 * $FreeBSD: src/sys/kern/vfs_cache.c,v 1.42.2.6 2001/10/05 20:07:03 dillon Exp $ - * $DragonFly: src/sys/kern/vfs_cache.c,v 1.49 2005/02/01 14:43:44 joerg Exp $ + * $DragonFly: src/sys/kern/vfs_cache.c,v 1.50 2005/02/02 21:34:18 joerg Exp $ */ #include @@ -379,7 +379,7 @@ cache_lock(struct namecache *ncp) didwarn = 1; printf("[diagnostic] cache_lock: blocked on %p", ncp); if ((ncp->nc_flag & NCF_MOUNTPT) && ncp->nc_mount) - printf(" [MOUNTPT %s]\n", ncp->nc_mount->mnt_stat.f_mntonname); + printf(" [MOUNTFROM %s]\n", ncp->nc_mount->mnt_stat.f_mntfromname); else printf(" \"%*.*s\"\n", ncp->nc_nlen, ncp->nc_nlen, @@ -1763,16 +1763,19 @@ cache_fullpath(struct proc *p, struct namecache *ncp, char **retbuf, char **free { char *bp, *buf; int i, slash_prefixed; - struct filedesc *fdp; + struct namecache *fd_nrdir; numfullpathcalls--; buf = malloc(MAXPATHLEN, M_TEMP, M_WAITOK); bp = buf + MAXPATHLEN - 1; *bp = '\0'; - fdp = p->p_fd; + if (p != NULL) + fd_nrdir = p->p_fd->fd_nrdir; + else + fd_nrdir = NULL; slash_prefixed = 0; - while (ncp && ncp != fdp->fd_nrdir && (ncp->nc_flag & NCF_ROOT) == 0) { + while (ncp && ncp != fd_nrdir && (ncp->nc_flag & NCF_ROOT) == 0) { if (ncp->nc_flag & NCF_MOUNTPT) { if (ncp->nc_mount == NULL) { free(buf, M_TEMP); @@ -1803,7 +1806,7 @@ cache_fullpath(struct proc *p, struct namecache *ncp, char **retbuf, char **free free(buf, M_TEMP); return(ENOENT); } - if ((ncp->nc_flag & NCF_ROOT) && ncp != fdp->fd_nrdir) { + if (p != NULL && (ncp->nc_flag & NCF_ROOT) && ncp != fd_nrdir) { bp = buf + MAXPATHLEN - 1; *bp = '\0'; slash_prefixed = 0; diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c index 00ffabd29a..5f071ca27b 100644 --- a/sys/kern/vfs_mount.c +++ b/sys/kern/vfs_mount.c @@ -67,7 +67,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $DragonFly: src/sys/kern/vfs_mount.c,v 1.4 2004/12/29 02:40:02 dillon Exp $ + * $DragonFly: src/sys/kern/vfs_mount.c,v 1.5 2005/02/02 21:34:18 joerg Exp $ */ /* @@ -272,9 +272,6 @@ vfs_rootmountalloc(char *fstypename, char *devname, struct mount **mpp) mp->mnt_stat.f_type = vfsp->vfc_typenum; mp->mnt_flag |= vfsp->vfc_flags & MNT_VISFLAGMASK; strncpy(mp->mnt_stat.f_fstypename, vfsp->vfc_name, MFSNAMELEN); - mp->mnt_stat.f_mntonname[0] = '/'; - mp->mnt_stat.f_mntonname[1] = 0; - (void) copystr(devname, mp->mnt_stat.f_mntfromname, MNAMELEN - 1, 0); *mpp = mp; return (0); } diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index c20be2adcb..53499ca6a1 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -37,7 +37,7 @@ * * @(#)vfs_subr.c 8.31 (Berkeley) 5/26/95 * $FreeBSD: src/sys/kern/vfs_subr.c,v 1.249.2.30 2003/04/04 20:35:57 tegge Exp $ - * $DragonFly: src/sys/kern/vfs_subr.c,v 1.50 2004/12/17 00:18:07 dillon Exp $ + * $DragonFly: src/sys/kern/vfs_subr.c,v 1.51 2005/02/02 21:34:18 joerg Exp $ */ /* @@ -1320,8 +1320,7 @@ vfs_unmountall(void) error = dounmount(mp, MNT_FORCE, td); if (error) { TAILQ_REMOVE(&mountlist, mp, mnt_list); - printf("unmount of %s failed (", - mp->mnt_stat.f_mntonname); + printf("unmount of filesystem mounted from %s failed (", mp->mnt_stat.f_mntfromname); if (error == EBUSY) printf("BUSY)\n"); else diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index e24f1b26e3..8b4251792f 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -37,7 +37,7 @@ * * @(#)vfs_syscalls.c 8.13 (Berkeley) 4/15/94 * $FreeBSD: src/sys/kern/vfs_syscalls.c,v 1.151.2.18 2003/04/04 20:35:58 tegge Exp $ - * $DragonFly: src/sys/kern/vfs_syscalls.c,v 1.57 2005/02/01 21:52:11 dillon Exp $ + * $DragonFly: src/sys/kern/vfs_syscalls.c,v 1.58 2005/02/02 21:34:18 joerg Exp $ */ #include @@ -76,6 +76,7 @@ static int checkvp_chdir (struct vnode *vn, struct thread *td); static void checkdirs (struct vnode *olddp, struct namecache *ncp); static int chroot_refuse_vdir_fds (struct filedesc *fdp); +static int chroot_visible_mnt(struct mount *mp, struct proc *p); static int getutimes (const struct timeval *, struct timespec *); static int setfown (struct vnode *, uid_t, gid_t); static int setfmode (struct vnode *, int); @@ -806,8 +807,10 @@ int kern_statfs(struct nlookupdata *nd, struct statfs *buf) { struct thread *td = curthread; + struct proc *p = td->td_proc; struct mount *mp; struct statfs *sp; + char *fullpath, *freepath; int error; if ((error = nlookup(nd)) != 0) @@ -816,6 +819,14 @@ kern_statfs(struct nlookupdata *nd, struct statfs *buf) sp = &mp->mnt_stat; if ((error = VFS_STATFS(mp, sp, td)) != 0) return (error); + + error = cache_fullpath(p, mp->mnt_ncp, &fullpath, &freepath); + if (error) + return(error); + bzero(sp->f_mntonname, sizeof(sp->f_mntonname)); + strlcpy(sp->f_mntonname, fullpath, sizeof(sp->f_mntonname)); + free(freepath, M_TEMP); + sp->f_flags = mp->mnt_flag & MNT_VISFLAGMASK; bcopy(sp, buf, sizeof(*buf)); /* Only root should have access to the fsid's. */ @@ -853,6 +864,7 @@ kern_fstatfs(int fd, struct statfs *buf) struct file *fp; struct mount *mp; struct statfs *sp; + char *fullpath, *freepath; int error; KKASSERT(p); @@ -866,8 +878,17 @@ kern_fstatfs(int fd, struct statfs *buf) error = VFS_STATFS(mp, sp, td); if (error) return (error); + + error = cache_fullpath(p, mp->mnt_ncp, &fullpath, &freepath); + if (error) + return(error); + bzero(sp->f_mntonname, sizeof(sp->f_mntonname)); + strlcpy(sp->f_mntonname, fullpath, sizeof(sp->f_mntonname)); + free(freepath, M_TEMP); + sp->f_flags = mp->mnt_flag & MNT_VISFLAGMASK; bcopy(sp, buf, sizeof(*buf)); + /* Only root should have access to the fsid's. */ if (suser(td)) buf->f_fsid.val[0] = buf->f_fsid.val[1] = 0; @@ -902,10 +923,18 @@ int getfsstat(struct getfsstat_args *uap) { struct thread *td = curthread; + struct proc *p = td->td_proc; struct mount *mp, *nmp; struct statfs *sp, *sfsp; lwkt_tokref ilock; long count, maxcount, error; + int is_chrooted; + char *freepath, *fullpath; + + if (p != NULL && (p->p_fd->fd_nrdir->nc_flag & NCF_ROOT) == 0) + is_chrooted = 1; + else + is_chrooted = 0; maxcount = uap->bufsize / sizeof(struct statfs); sfsp = uap->buf; @@ -917,6 +946,12 @@ getfsstat(struct getfsstat_args *uap) continue; } if (sfsp && count < maxcount) { + if (is_chrooted && !chroot_visible_mnt(mp, p)) { + lwkt_gettokref(&ilock); + nmp = TAILQ_NEXT(mp, mnt_list); + vfs_unbusy(mp, td); + continue; + } sp = &mp->mnt_stat; /* * If MNT_NOWAIT or MNT_LAZY is specified, do not @@ -932,6 +967,15 @@ getfsstat(struct getfsstat_args *uap) continue; } sp->f_flags = mp->mnt_flag & MNT_VISFLAGMASK; + + error = cache_fullpath(p, mp->mnt_ncp, &fullpath, &freepath); + if (error) + return(error); + bzero(sp->f_mntonname, sizeof(sp->f_mntonname)); + strlcpy(sp->f_mntonname, fullpath, + sizeof(sp->f_mntonname)); + free(freepath, M_TEMP); + error = copyout(sp, sfsp, sizeof(*sp)); if (error) { vfs_unbusy(mp, td); @@ -3278,10 +3322,12 @@ int fhstatfs(struct fhstatfs_args *uap) { struct thread *td = curthread; + struct proc *p = td->td_proc; struct statfs *sp; struct mount *mp; struct vnode *vp; struct statfs sb; + char *fullpath, *freepath; fhandle_t fh; int error; @@ -3296,6 +3342,11 @@ fhstatfs(struct fhstatfs_args *uap) if ((mp = vfs_getvfs(&fh.fh_fsid)) == NULL) return (ESTALE); + + if (p != NULL && (p->p_fd->fd_nrdir->nc_flag & NCF_ROOT) == 0 && + !chroot_visible_mnt(mp, p)) + return (ESTALE); + if ((error = VFS_FHTOVP(mp, &fh.fh_fid, &vp))) return (error); mp = vp->v_mount; @@ -3303,6 +3354,14 @@ fhstatfs(struct fhstatfs_args *uap) vput(vp); if ((error = VFS_STATFS(mp, sp, td)) != 0) return (error); + + error = cache_fullpath(p, mp->mnt_ncp, &fullpath, &freepath); + if (error) + return(error); + bzero(sp->f_mntonname, sizeof(sp->f_mntonname)); + strlcpy(sp->f_mntonname, fullpath, sizeof(sp->f_mntonname)); + free(freepath, M_TEMP); + sp->f_flags = mp->mnt_flag & MNT_VISFLAGMASK; if (suser(td)) { bcopy(sp, &sb, sizeof(sb)); @@ -3564,3 +3623,34 @@ vfs_bufstats(void) } } #endif + +static int +chroot_visible_mnt(struct mount *mp, struct proc *p) +{ + struct namecache *ncp; + /* + * First check if this file system is below + * the chroot path. + */ + ncp = mp->mnt_ncp; + while (ncp != NULL && ncp != p->p_fd->fd_nrdir) + ncp = ncp->nc_parent; + if (ncp == NULL) { + /* + * This is not below the chroot path. + * + * Check if the chroot path is on the same filesystem, + * by determing if we have to cross a mount point + * before reaching mp->mnt_ncp. + */ + ncp = p->p_fd->fd_nrdir; + while (ncp != NULL && ncp != mp->mnt_ncp) { + if (ncp->nc_flag & NCF_MOUNTPT) { + ncp = NULL; + break; + } + ncp = ncp->nc_parent; + } + } + return(ncp != NULL); +} diff --git a/sys/vfs/coda/coda_vfsops.c b/sys/vfs/coda/coda_vfsops.c index 7b5457221b..abf019da49 100644 --- a/sys/vfs/coda/coda_vfsops.c +++ b/sys/vfs/coda/coda_vfsops.c @@ -28,7 +28,7 @@ * * @(#) src/sys/cfs/coda_vfsops.c,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $ * $FreeBSD: src/sys/coda/coda_vfsops.c,v 1.24.2.1 2001/07/26 20:36:45 iedowse Exp $ - * $DragonFly: src/sys/vfs/coda/Attic/coda_vfsops.c,v 1.18 2004/11/12 00:09:28 dillon Exp $ + * $DragonFly: src/sys/vfs/coda/Attic/coda_vfsops.c,v 1.19 2005/02/02 21:34:18 joerg Exp $ * */ @@ -388,7 +388,6 @@ coda_nb_statfs(struct mount *vfsp, struct statfs *sbp, struct thread *td) sbp->f_files = NB_SFS_SIZ; sbp->f_ffree = NB_SFS_SIZ; bcopy((caddr_t)&(vfsp->mnt_stat.f_fsid), (caddr_t)&(sbp->f_fsid), sizeof (fsid_t)); - snprintf(sbp->f_mntonname, sizeof(sbp->f_mntonname), "/coda"); snprintf(sbp->f_mntfromname, sizeof(sbp->f_mntfromname), "CODA"); /* MARK_INT_SAT(CODA_STATFS_STATS); */ return(0); diff --git a/sys/vfs/fdesc/fdesc_vfsops.c b/sys/vfs/fdesc/fdesc_vfsops.c index f837ca6ef8..d217e73a47 100644 --- a/sys/vfs/fdesc/fdesc_vfsops.c +++ b/sys/vfs/fdesc/fdesc_vfsops.c @@ -36,7 +36,7 @@ * @(#)fdesc_vfsops.c 8.4 (Berkeley) 1/21/94 * * $FreeBSD: src/sys/miscfs/fdesc/fdesc_vfsops.c,v 1.22.2.3 2002/08/23 17:42:39 njl Exp $ - * $DragonFly: src/sys/vfs/fdesc/fdesc_vfsops.c,v 1.11 2004/12/17 00:18:18 dillon Exp $ + * $DragonFly: src/sys/vfs/fdesc/fdesc_vfsops.c,v 1.12 2005/02/02 21:34:18 joerg Exp $ */ /* @@ -104,8 +104,6 @@ fdesc_mount(struct mount *mp, char *path, caddr_t data, struct thread *td) mp->mnt_data = (qaddr_t) fmp; vfs_getnewfsid(mp); - (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size); - bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size); bzero(mp->mnt_stat.f_mntfromname, MNAMELEN); bcopy("fdesc", mp->mnt_stat.f_mntfromname, sizeof("fdesc")); (void)fdesc_statfs(mp, &mp->mnt_stat, td); @@ -201,7 +199,6 @@ fdesc_statfs(struct mount *mp, struct statfs *sbp, struct thread *td) if (sbp != &mp->mnt_stat) { sbp->f_type = mp->mnt_vfc->vfc_typenum; bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid)); - bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN); bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN); } return (0); diff --git a/sys/vfs/gnu/ext2fs/ext2_vfsops.c b/sys/vfs/gnu/ext2fs/ext2_vfsops.c index 9f20680c0b..ab35f66721 100644 --- a/sys/vfs/gnu/ext2fs/ext2_vfsops.c +++ b/sys/vfs/gnu/ext2fs/ext2_vfsops.c @@ -38,7 +38,7 @@ * * @(#)ffs_vfsops.c 8.8 (Berkeley) 4/18/94 * $FreeBSD: src/sys/gnu/ext2fs/ext2_vfsops.c,v 1.63.2.7 2002/07/01 00:18:51 iedowse Exp $ - * $DragonFly: src/sys/vfs/gnu/ext2fs/ext2_vfsops.c,v 1.25 2004/12/29 02:42:14 dillon Exp $ + * $DragonFly: src/sys/vfs/gnu/ext2fs/ext2_vfsops.c,v 1.26 2005/02/02 21:34:18 joerg Exp $ */ #include "opt_quota.h" @@ -262,7 +262,6 @@ ext2_mount(struct mount *mp, char *path, fs = ump->um_e2fs; copyinstr(path, fs->fs_fsmnt, sizeof(fs->fs_fsmnt) - 1, &size); bzero(fs->fs_fsmnt + size, sizeof(fs->fs_fsmnt) - size); - bcopy(fs->fs_fsmnt, mp->mnt_stat.f_mntonname, MNAMELEN); copyinstr(args.fspec, mp->mnt_stat.f_mntfromname, MNAMELEN - 1, &size); bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size); ext2_statfs(mp, &mp->mnt_stat, td); @@ -842,8 +841,6 @@ ext2_statfs(struct mount *mp, struct statfs *sbp, struct thread *td) sbp->f_ffree = es->s_free_inodes_count; if (sbp != &mp->mnt_stat) { sbp->f_type = mp->mnt_vfc->vfc_typenum; - bcopy((caddr_t)mp->mnt_stat.f_mntonname, - (caddr_t)&sbp->f_mntonname[0], MNAMELEN); bcopy((caddr_t)mp->mnt_stat.f_mntfromname, (caddr_t)&sbp->f_mntfromname[0], MNAMELEN); } diff --git a/sys/vfs/hpfs/hpfs_vfsops.c b/sys/vfs/hpfs/hpfs_vfsops.c index 29d49178ba..b4ed2e9e22 100644 --- a/sys/vfs/hpfs/hpfs_vfsops.c +++ b/sys/vfs/hpfs/hpfs_vfsops.c @@ -24,7 +24,7 @@ * SUCH DAMAGE. * * $FreeBSD: src/sys/fs/hpfs/hpfs_vfsops.c,v 1.3.2.2 2001/12/25 01:44:45 dillon Exp $ - * $DragonFly: src/sys/vfs/hpfs/hpfs_vfsops.c,v 1.25 2004/12/29 02:42:15 dillon Exp $ + * $DragonFly: src/sys/vfs/hpfs/hpfs_vfsops.c,v 1.26 2005/02/02 21:34:18 joerg Exp $ */ @@ -229,19 +229,6 @@ hpfs_mount(struct mount *mp, ******************** */ - /* - * Since this is a new mount, we want the names for - * the device and the mount point copied in. If an - * error occurs, the mountpoint is discarded by the - * upper level code. - */ - /* Save "last mounted on" info for mount point (NULL pad)*/ - copyinstr( path, /* mount point*/ - mp->mnt_stat.f_mntonname, /* save area*/ - MNAMELEN - 1, /* max size*/ - &size); /* real size*/ - bzero( mp->mnt_stat.f_mntonname + size, MNAMELEN - size); - /* Save "mounted from" info for mount point (NULL pad)*/ copyinstr( args.fspec, /* device name*/ mp->mnt_stat.f_mntfromname, /* save area*/ @@ -254,8 +241,8 @@ hpfs_mount(struct mount *mp, goto error_2; /* - * Initialize FS stat information in mount struct; uses both - * mp->mnt_stat.f_mntonname and mp->mnt_stat.f_mntfromname + * Initialize FS stat information in mount struct; uses + * mp->mnt_stat.f_mntfromname. * * This code is common to root and non-root mounts */ @@ -499,8 +486,6 @@ hpfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td) sbp->f_ffree = 0; sbp->f_files = 0; if (sbp != &mp->mnt_stat) { - bcopy((caddr_t)mp->mnt_stat.f_mntonname, - (caddr_t)&sbp->f_mntonname[0], MNAMELEN); bcopy((caddr_t)mp->mnt_stat.f_mntfromname, (caddr_t)&sbp->f_mntfromname[0], MNAMELEN); } diff --git a/sys/vfs/isofs/cd9660/cd9660_rrip.c b/sys/vfs/isofs/cd9660/cd9660_rrip.c index c125845a87..7e3716deaa 100644 --- a/sys/vfs/isofs/cd9660/cd9660_rrip.c +++ b/sys/vfs/isofs/cd9660/cd9660_rrip.c @@ -37,7 +37,7 @@ * * @(#)cd9660_rrip.c 8.6 (Berkeley) 12/5/94 * $FreeBSD: src/sys/isofs/cd9660/cd9660_rrip.c,v 1.17 1999/08/28 00:46:06 peter Exp $ - * $DragonFly: src/sys/vfs/isofs/cd9660/cd9660_rrip.c,v 1.7 2004/04/12 23:18:55 cpressey Exp $ + * $DragonFly: src/sys/vfs/isofs/cd9660/cd9660_rrip.c,v 1.8 2005/02/02 21:34:18 joerg Exp $ */ #include @@ -121,14 +121,15 @@ cd9660_rrip_slink(ISO_RRIP_SLINK *p, ISO_RRIP_ANALYZE *ana) { ISO_RRIP_SLINK_COMPONENT *pcomp; ISO_RRIP_SLINK_COMPONENT *pcompe; - int len, wlen, cont; - char *outbuf, *inbuf; + int error, len, wlen, cont; + char *outbuf, *inbuf, *freebuf; pcomp = (ISO_RRIP_SLINK_COMPONENT *)p->component; pcompe = (ISO_RRIP_SLINK_COMPONENT *)((char *)p + isonum_711(p->h.length)); len = *ana->outlen; outbuf = ana->outbuf; cont = ana->cont; + freebuf = NULL; /* * Gathering a Symbolic name from each component with path @@ -173,7 +174,10 @@ cd9660_rrip_slink(ISO_RRIP_SLINK *p, ISO_RRIP_ANALYZE *ana) /* same as above */ outbuf -= len; len = 0; - inbuf = ana->imp->im_mountp->mnt_stat.f_mntonname; + error = cache_fullpath(NULL, ana->imp->im_mountp->mnt_ncp, + &inbuf, &freebuf); + if (error) + goto bad; wlen = strlen(inbuf); break; @@ -197,19 +201,17 @@ cd9660_rrip_slink(ISO_RRIP_SLINK *p, ISO_RRIP_ANALYZE *ana) break; } - if (len + wlen > ana->maxlen) { - /* indicate error to caller */ - ana->cont = 1; - ana->fields = 0; - ana->outbuf -= *ana->outlen; - *ana->outlen = 0; - return 0; - } + if (len + wlen > ana->maxlen) + goto bad; bcopy(inbuf,outbuf,wlen); outbuf += wlen; len += wlen; + if (freebuf != NULL) { + free(freebuf, M_TEMP); + freebuf = NULL; + } } ana->outbuf = outbuf; *ana->outlen = len; @@ -220,6 +222,13 @@ cd9660_rrip_slink(ISO_RRIP_SLINK *p, ISO_RRIP_ANALYZE *ana) return ISO_SUSP_SLINK; } return 0; + +bad: + ana->cont = 1; + ana->fields = 0; + ana->outbuf -= *ana->outlen; + *ana->outlen = 0; + return 0; } /* diff --git a/sys/vfs/isofs/cd9660/cd9660_vfsops.c b/sys/vfs/isofs/cd9660/cd9660_vfsops.c index 61e19d050f..bbdf8284df 100644 --- a/sys/vfs/isofs/cd9660/cd9660_vfsops.c +++ b/sys/vfs/isofs/cd9660/cd9660_vfsops.c @@ -37,7 +37,7 @@ * * @(#)cd9660_vfsops.c 8.18 (Berkeley) 5/22/95 * $FreeBSD: src/sys/isofs/cd9660/cd9660_vfsops.c,v 1.74.2.7 2002/04/08 09:39:29 bde Exp $ - * $DragonFly: src/sys/vfs/isofs/cd9660/cd9660_vfsops.c,v 1.24 2004/12/17 00:18:23 dillon Exp $ + * $DragonFly: src/sys/vfs/isofs/cd9660/cd9660_vfsops.c,v 1.25 2005/02/02 21:34:18 joerg Exp $ */ #include @@ -257,8 +257,6 @@ cd9660_mount(struct mount *mp, char *path, caddr_t data, struct thread *td) return error; } imp = VFSTOISOFS(mp); - (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size); - bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size); (void) copyinstr(args.fspec, mp->mnt_stat.f_mntfromname, MNAMELEN - 1, &size); bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size); @@ -603,7 +601,6 @@ cd9660_statfs(struct mount *mp, struct statfs *sbp, struct thread *td) sbp->f_ffree = 0; /* free file nodes */ if (sbp != &mp->mnt_stat) { sbp->f_type = mp->mnt_vfc->vfc_typenum; - bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN); bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN); } return 0; diff --git a/sys/vfs/mfs/mfs_vfsops.c b/sys/vfs/mfs/mfs_vfsops.c index 4c2d6c1ddb..ab38341a14 100644 --- a/sys/vfs/mfs/mfs_vfsops.c +++ b/sys/vfs/mfs/mfs_vfsops.c @@ -32,7 +32,7 @@ * * @(#)mfs_vfsops.c 8.11 (Berkeley) 6/19/95 * $FreeBSD: src/sys/ufs/mfs/mfs_vfsops.c,v 1.81.2.3 2001/07/04 17:35:21 tegge Exp $ - * $DragonFly: src/sys/vfs/mfs/mfs_vfsops.c,v 1.20 2004/12/17 00:18:25 dillon Exp $ + * $DragonFly: src/sys/vfs/mfs/mfs_vfsops.c,v 1.21 2005/02/02 21:34:18 joerg Exp $ */ @@ -314,19 +314,6 @@ mfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td) mfsp->mfs_active = 1; bufq_init(&mfsp->buf_queue); - /* - * Since this is a new mount, we want the names for - * the device and the mount point copied in. If an - * error occurs, the mountpoint is discarded by the - * upper level code. - */ - /* Save "last mounted on" info for mount point (NULL pad)*/ - copyinstr( path, /* mount point*/ - mp->mnt_stat.f_mntonname, /* save area*/ - MNAMELEN - 1, /* max size*/ - &size); /* real size*/ - bzero( mp->mnt_stat.f_mntonname + size, MNAMELEN - size); - /* Save "mounted from" info for mount point (NULL pad)*/ copyinstr( args.fspec, /* device name*/ mp->mnt_stat.f_mntfromname, /* save area*/ @@ -341,8 +328,8 @@ mfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td) } /* - * Initialize FS stat information in mount struct; uses both - * mp->mnt_stat.f_mntonname and mp->mnt_stat.f_mntfromname + * Initialize FS stat information in mount struct; uses + * mp->mnt_stat.f_mntfromname. * * This code is common to root and non-root mounts */ diff --git a/sys/vfs/msdosfs/msdosfs_vfsops.c b/sys/vfs/msdosfs/msdosfs_vfsops.c index 5529daa810..dba5a4a002 100644 --- a/sys/vfs/msdosfs/msdosfs_vfsops.c +++ b/sys/vfs/msdosfs/msdosfs_vfsops.c @@ -1,5 +1,5 @@ /* $FreeBSD: /usr/local/www/cvsroot/FreeBSD/src/sys/msdosfs/Attic/msdosfs_vfsops.c,v 1.60.2.8 2004/03/02 09:43:04 tjr Exp $ */ -/* $DragonFly: src/sys/vfs/msdosfs/msdosfs_vfsops.c,v 1.23 2004/12/29 02:42:16 dillon Exp $ */ +/* $DragonFly: src/sys/vfs/msdosfs/msdosfs_vfsops.c,v 1.24 2005/02/02 21:34:18 joerg Exp $ */ /* $NetBSD: msdosfs_vfsops.c,v 1.51 1997/11/17 15:36:58 ws Exp $ */ /*- @@ -287,8 +287,6 @@ msdosfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td) return error; } - (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size); - bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size); (void) copyinstr(args.fspec, mp->mnt_stat.f_mntfromname, MNAMELEN - 1, &size); bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size); @@ -767,7 +765,6 @@ msdosfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td) sbp->f_ffree = 0; /* what to put in here? */ if (sbp != &mp->mnt_stat) { sbp->f_type = mp->mnt_vfc->vfc_typenum; - bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN); bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN); } strncpy(sbp->f_fstypename, mp->mnt_vfc->vfc_name, MFSNAMELEN); diff --git a/sys/vfs/nfs/nfs_vfsops.c b/sys/vfs/nfs/nfs_vfsops.c index 611eedfa2c..aee0be7c89 100644 --- a/sys/vfs/nfs/nfs_vfsops.c +++ b/sys/vfs/nfs/nfs_vfsops.c @@ -35,7 +35,7 @@ * * @(#)nfs_vfsops.c 8.12 (Berkeley) 5/20/95 * $FreeBSD: src/sys/nfs/nfs_vfsops.c,v 1.91.2.7 2003/01/27 20:04:08 dillon Exp $ - * $DragonFly: src/sys/vfs/nfs/nfs_vfsops.c,v 1.23 2004/12/17 00:18:28 dillon Exp $ + * $DragonFly: src/sys/vfs/nfs/nfs_vfsops.c,v 1.24 2005/02/02 21:34:18 joerg Exp $ */ #include "opt_bootp.h" @@ -345,7 +345,6 @@ nfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td) } if (sbp != &mp->mnt_stat) { sbp->f_type = mp->mnt_vfc->vfc_typenum; - bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN); bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN); } m_freem(mrep); @@ -625,7 +624,6 @@ nfs_mountdiskless(char *path, char *which, int mountflag, FREE(nam, M_SONAME); return (error); } - (void) copystr(which, mp->mnt_stat.f_mntonname, MNAMELEN - 1, 0); *mpp = mp; return (0); } @@ -928,7 +926,6 @@ mountnfs(struct nfs_args *argp, struct mount *mp, struct sockaddr *nam, nmp->nm_fhsize = argp->fhsize; bcopy((caddr_t)argp->fh, (caddr_t)nmp->nm_fh, argp->fhsize); bcopy(hst, mp->mnt_stat.f_mntfromname, MNAMELEN); - bcopy(pth, mp->mnt_stat.f_mntonname, MNAMELEN); nmp->nm_nam = nam; /* Set up the sockets and per-host congestion */ nmp->nm_sotype = argp->sotype; diff --git a/sys/vfs/ntfs/ntfs_vfsops.c b/sys/vfs/ntfs/ntfs_vfsops.c index b2f51fc36a..0073b19b06 100644 --- a/sys/vfs/ntfs/ntfs_vfsops.c +++ b/sys/vfs/ntfs/ntfs_vfsops.c @@ -26,7 +26,7 @@ * SUCH DAMAGE. * * $FreeBSD: src/sys/ntfs/ntfs_vfsops.c,v 1.20.2.5 2001/12/25 01:44:45 dillon Exp $ - * $DragonFly: src/sys/vfs/ntfs/ntfs_vfsops.c,v 1.25 2004/12/17 00:18:29 dillon Exp $ + * $DragonFly: src/sys/vfs/ntfs/ntfs_vfsops.c,v 1.26 2005/02/02 21:34:18 joerg Exp $ */ @@ -355,19 +355,6 @@ ntfs_mount(struct mount *mp, ******************** */ - /* - * Since this is a new mount, we want the names for - * the device and the mount point copied in. If an - * error occurs, the mountpoint is discarded by the - * upper level code. - */ - /* Save "last mounted on" info for mount point (NULL pad)*/ - copyinstr( path, /* mount point*/ - mp->mnt_stat.f_mntonname, /* save area*/ - MNAMELEN - 1, /* max size*/ - &size); /* real size*/ - bzero( mp->mnt_stat.f_mntonname + size, MNAMELEN - size); - /* Save "mounted from" info for mount point (NULL pad)*/ copyinstr( args.fspec, /* device name*/ mp->mnt_stat.f_mntfromname, /* save area*/ @@ -385,8 +372,8 @@ ntfs_mount(struct mount *mp, dostatfs: #endif /* - * Initialize FS stat information in mount struct; uses both - * mp->mnt_stat.f_mntonname and mp->mnt_stat.f_mntfromname + * Initialize FS stat information in mount struct; uses + * mp->mnt_stat.f_mntfromname. * * This code is common to root and non-root mounts */ @@ -789,8 +776,6 @@ ntfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td) sbp->f_files = mftallocated / ntfs_bntob(ntmp->ntm_bpmftrec) + sbp->f_ffree; if (sbp != &mp->mnt_stat) { - bcopy((caddr_t)mp->mnt_stat.f_mntonname, - (caddr_t)&sbp->f_mntonname[0], MNAMELEN); bcopy((caddr_t)mp->mnt_stat.f_mntfromname, (caddr_t)&sbp->f_mntfromname[0], MNAMELEN); } diff --git a/sys/vfs/nullfs/null_vfsops.c b/sys/vfs/nullfs/null_vfsops.c index 91e265507c..aaf5de5428 100644 --- a/sys/vfs/nullfs/null_vfsops.c +++ b/sys/vfs/nullfs/null_vfsops.c @@ -37,7 +37,7 @@ * * @(#)lofs_vfsops.c 1.2 (Berkeley) 6/18/92 * $FreeBSD: src/sys/miscfs/nullfs/null_vfsops.c,v 1.35.2.3 2001/07/26 20:37:11 iedowse Exp $ - * $DragonFly: src/sys/vfs/nullfs/null_vfsops.c,v 1.15 2004/12/17 00:18:30 dillon Exp $ + * $DragonFly: src/sys/vfs/nullfs/null_vfsops.c,v 1.16 2005/02/02 21:34:18 joerg Exp $ */ /* @@ -190,14 +190,12 @@ nullfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td) mp->mnt_data = (qaddr_t) xmp; vfs_getnewfsid(mp); - (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size); - bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size); (void) copyinstr(args.target, mp->mnt_stat.f_mntfromname, MNAMELEN - 1, &size); bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size); (void)nullfs_statfs(mp, &mp->mnt_stat, td); NULLFSDEBUG("nullfs_mount: lower %s, alias at %s\n", - mp->mnt_stat.f_mntfromname, mp->mnt_stat.f_mntonname); + mp->mnt_stat.f_mntfromname, mp->mnt_stat.f_mntfromname); return (0); } @@ -305,7 +303,6 @@ nullfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td) sbp->f_ffree = mstat.f_ffree; if (sbp != &mp->mnt_stat) { bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid)); - bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN); bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN); } return (0); diff --git a/sys/vfs/nwfs/nwfs_vfsops.c b/sys/vfs/nwfs/nwfs_vfsops.c index af10a0b7b5..c06df5580d 100644 --- a/sys/vfs/nwfs/nwfs_vfsops.c +++ b/sys/vfs/nwfs/nwfs_vfsops.c @@ -30,7 +30,7 @@ * SUCH DAMAGE. * * $FreeBSD: src/sys/nwfs/nwfs_vfsops.c,v 1.6.2.6 2001/10/25 19:18:54 dillon Exp $ - * $DragonFly: src/sys/vfs/nwfs/nwfs_vfsops.c,v 1.14 2004/12/17 00:18:32 dillon Exp $ + * $DragonFly: src/sys/vfs/nwfs/nwfs_vfsops.c,v 1.15 2005/02/02 21:34:18 joerg Exp $ */ #include "opt_ncp.h" #ifndef NCP @@ -201,8 +201,6 @@ nwfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td) nmp->m.dir_mode = (nmp->m.dir_mode & (S_IRWXU|S_IRWXG|S_IRWXO)) | S_IFDIR; if ((error = nwfs_initnls(nmp)) != 0) goto bad; - (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size); - bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size); pc = mp->mnt_stat.f_mntfromname; pe = pc+sizeof(mp->mnt_stat.f_mntfromname); bzero(pc, MNAMELEN); @@ -463,7 +461,6 @@ nwfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td) sbp->f_fsid = mp->mnt_stat.f_fsid; /* file system id */ sbp->f_owner = mp->mnt_stat.f_owner; /* user that mounted the filesystem */ sbp->f_type = mp->mnt_vfc->vfc_typenum; /* type of filesystem */ - bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN); bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN); } strncpy(sbp->f_fstypename, mp->mnt_vfc->vfc_name, MFSNAMELEN); diff --git a/sys/vfs/portal/portal_vfsops.c b/sys/vfs/portal/portal_vfsops.c index d6313e9dae..dc97443449 100644 --- a/sys/vfs/portal/portal_vfsops.c +++ b/sys/vfs/portal/portal_vfsops.c @@ -36,7 +36,7 @@ * @(#)portal_vfsops.c 8.11 (Berkeley) 5/14/95 * * $FreeBSD: src/sys/miscfs/portal/portal_vfsops.c,v 1.26.2.2 2001/07/26 20:37:16 iedowse Exp $ - * $DragonFly: src/sys/vfs/portal/portal_vfsops.c,v 1.14 2004/12/17 00:18:33 dillon Exp $ + * $DragonFly: src/sys/vfs/portal/portal_vfsops.c,v 1.15 2005/02/02 21:34:18 joerg Exp $ */ /* @@ -135,8 +135,6 @@ portal_mount(struct mount *mp, char *path, caddr_t data, struct thread *td) mp->mnt_data = (qaddr_t) fmp; vfs_getnewfsid(mp); - (void)copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size); - bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size); (void)copyinstr(args.pa_config, mp->mnt_stat.f_mntfromname, MNAMELEN - 1, &size); bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size); @@ -226,7 +224,6 @@ portal_statfs(struct mount *mp, struct statfs *sbp, struct thread *td) if (sbp != &mp->mnt_stat) { sbp->f_type = mp->mnt_vfc->vfc_typenum; bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid)); - bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN); bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN); } return (0); diff --git a/sys/vfs/procfs/procfs_vfsops.c b/sys/vfs/procfs/procfs_vfsops.c index 2f6fefd642..502ab58087 100644 --- a/sys/vfs/procfs/procfs_vfsops.c +++ b/sys/vfs/procfs/procfs_vfsops.c @@ -37,7 +37,7 @@ * @(#)procfs_vfsops.c 8.7 (Berkeley) 5/10/95 * * $FreeBSD: src/sys/miscfs/procfs/procfs_vfsops.c,v 1.32.2.1 2001/10/15 20:42:01 des Exp $ - * $DragonFly: src/sys/vfs/procfs/procfs_vfsops.c,v 1.10 2004/12/17 00:18:34 dillon Exp $ + * $DragonFly: src/sys/vfs/procfs/procfs_vfsops.c,v 1.11 2005/02/02 21:34:18 joerg Exp $ */ /* @@ -85,9 +85,6 @@ procfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td) mp->mnt_data = 0; vfs_getnewfsid(mp); - (void) copyinstr(path, (caddr_t)mp->mnt_stat.f_mntonname, MNAMELEN, &size); - bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size); - size = sizeof("procfs") - 1; bcopy("procfs", mp->mnt_stat.f_mntfromname, size); bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size); @@ -145,7 +142,6 @@ procfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td) if (sbp != &mp->mnt_stat) { sbp->f_type = mp->mnt_vfc->vfc_typenum; bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid)); - bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN); bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN); } diff --git a/sys/vfs/smbfs/smbfs_vfsops.c b/sys/vfs/smbfs/smbfs_vfsops.c index 32931167fc..c7e845a855 100644 --- a/sys/vfs/smbfs/smbfs_vfsops.c +++ b/sys/vfs/smbfs/smbfs_vfsops.c @@ -30,7 +30,7 @@ * SUCH DAMAGE. * * $FreeBSD: src/sys/fs/smbfs/smbfs_vfsops.c,v 1.2.2.5 2003/01/17 08:20:26 tjr Exp $ - * $DragonFly: src/sys/vfs/smbfs/smbfs_vfsops.c,v 1.16 2004/12/17 00:18:35 dillon Exp $ + * $DragonFly: src/sys/vfs/smbfs/smbfs_vfsops.c,v 1.17 2005/02/02 21:34:18 joerg Exp $ */ #include "opt_netsmb.h" #ifndef NETSMB @@ -200,10 +200,6 @@ smbfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td) (S_IRWXU|S_IRWXG|S_IRWXO)) | S_IFDIR; /* simple_lock_init(&smp->sm_npslock);*/ - error = copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size); - if (error) - goto bad; - bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size); pc = mp->mnt_stat.f_mntfromname; pe = pc + sizeof(mp->mnt_stat.f_mntfromname); bzero(pc, MNAMELEN); @@ -414,7 +410,6 @@ smbfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td) sbp->f_fsid = mp->mnt_stat.f_fsid; /* file system id */ sbp->f_owner = mp->mnt_stat.f_owner; /* user that mounted the filesystem */ sbp->f_type = mp->mnt_vfc->vfc_typenum; /* type of filesystem */ - bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN); bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN); } strncpy(sbp->f_fstypename, mp->mnt_vfc->vfc_name, MFSNAMELEN); diff --git a/sys/vfs/udf/udf_vfsops.c b/sys/vfs/udf/udf_vfsops.c index 18f5b5feb7..a9b41b3605 100644 --- a/sys/vfs/udf/udf_vfsops.c +++ b/sys/vfs/udf/udf_vfsops.c @@ -24,7 +24,7 @@ * SUCH DAMAGE. * * $FreeBSD: src/sys/fs/udf/udf_vfsops.c,v 1.16 2003/11/05 06:56:08 scottl Exp $ - * $DragonFly: src/sys/vfs/udf/udf_vfsops.c,v 1.11 2004/12/17 00:18:36 dillon Exp $ + * $DragonFly: src/sys/vfs/udf/udf_vfsops.c,v 1.12 2005/02/02 21:34:18 joerg Exp $ */ /* udf_vfsops.c */ @@ -196,8 +196,6 @@ udf_mount(struct mount *mp, char *path, caddr_t data, struct thread *td) imp->im_flags = args.flags; - copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size); - bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size); copyinstr(args.fspec, mp->mnt_stat.f_mntfromname, MNAMELEN - 1, &size); bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size); udf_statfs(mp, &mp->mnt_stat, td); @@ -475,7 +473,6 @@ udf_statfs(struct mount *mp, struct statfs *sbp, struct thread *td) sbp->f_ffree = 0; if (sbp != &mp->mnt_stat) { sbp->f_type = mp->mnt_vfc->vfc_typenum; - bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN); bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN); } diff --git a/sys/vfs/ufs/ffs_softdep.c b/sys/vfs/ufs/ffs_softdep.c index 5d3282ef4c..ce016df58c 100644 --- a/sys/vfs/ufs/ffs_softdep.c +++ b/sys/vfs/ufs/ffs_softdep.c @@ -37,7 +37,7 @@ * * from: @(#)ffs_softdep.c 9.59 (McKusick) 6/21/00 * $FreeBSD: src/sys/ufs/ffs/ffs_softdep.c,v 1.57.2.11 2002/02/05 18:46:53 dillon Exp $ - * $DragonFly: src/sys/vfs/ufs/ffs_softdep.c,v 1.20 2004/11/09 04:41:47 dillon Exp $ + * $DragonFly: src/sys/vfs/ufs/ffs_softdep.c,v 1.21 2005/02/02 21:34:19 joerg Exp $ */ /* @@ -4935,7 +4935,7 @@ softdep_deallocate_dependencies(bp) if ((bp->b_flags & B_ERROR) == 0) panic("softdep_deallocate_dependencies: dangling deps"); - softdep_error(bp->b_vp->v_mount->mnt_stat.f_mntonname, bp->b_error); + softdep_error(bp->b_vp->v_mount->mnt_stat.f_mntfromname, bp->b_error); panic("softdep_deallocate_dependencies: unrecovered I/O error"); } diff --git a/sys/vfs/ufs/ffs_vfsops.c b/sys/vfs/ufs/ffs_vfsops.c index 0146b0fecf..8eab64b15b 100644 --- a/sys/vfs/ufs/ffs_vfsops.c +++ b/sys/vfs/ufs/ffs_vfsops.c @@ -32,7 +32,7 @@ * * @(#)ffs_vfsops.c 8.31 (Berkeley) 5/20/95 * $FreeBSD: src/sys/ufs/ffs/ffs_vfsops.c,v 1.117.2.10 2002/06/23 22:34:52 iedowse Exp $ - * $DragonFly: src/sys/vfs/ufs/ffs_vfsops.c,v 1.29 2004/12/17 00:18:44 dillon Exp $ + * $DragonFly: src/sys/vfs/ufs/ffs_vfsops.c,v 1.30 2005/02/02 21:34:19 joerg Exp $ */ #include "opt_quota.h" @@ -352,19 +352,6 @@ ffs_mount(struct mount *mp, /* mount struct pointer */ ******************** */ - /* - * Since this is a new mount, we want the names for - * the device and the mount point copied in. If an - * error occurs, the mountpoint is discarded by the - * upper level code. - */ - /* Save "last mounted on" info for mount point (NULL pad)*/ - copyinstr( path, /* mount point*/ - mp->mnt_stat.f_mntonname, /* save area*/ - MNAMELEN - 1, /* max size*/ - &size); /* real size*/ - bzero( mp->mnt_stat.f_mntonname + size, MNAMELEN - size); - /* Save "mounted from" info for mount point (NULL pad)*/ copyinstr( args.fspec, /* device name*/ mp->mnt_stat.f_mntfromname, /* save area*/ @@ -380,8 +367,8 @@ ffs_mount(struct mount *mp, /* mount struct pointer */ dostatfs: /* - * Initialize FS stat information in mount struct; uses both - * mp->mnt_stat.f_mntonname and mp->mnt_stat.f_mntfromname + * Initialize FS stat information in mount struct; uses + * mp->mnt_stat.f_mntfromname. * * This code is common to root and non-root mounts */ @@ -754,15 +741,6 @@ ffs_mountfs(struct vnode *devvp, struct mount *mp, struct thread *td, dev->si_mountpoint = mp; ffs_oldfscompat(fs); - /* - * Set FS local "last mounted on" information (NULL pad) - */ - copystr( mp->mnt_stat.f_mntonname, /* mount point*/ - fs->fs_fsmnt, /* copy area*/ - sizeof(fs->fs_fsmnt) - 1, /* max size*/ - &strsize); /* real size*/ - bzero( fs->fs_fsmnt + strsize, sizeof(fs->fs_fsmnt) - strsize); - if( mp->mnt_flag & MNT_ROOTFS) { /* * Root mount; update timestamp in mount structure. @@ -948,8 +926,6 @@ ffs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td) sbp->f_ffree = fs->fs_cstotal.cs_nifree; if (sbp != &mp->mnt_stat) { sbp->f_type = mp->mnt_vfc->vfc_typenum; - bcopy((caddr_t)mp->mnt_stat.f_mntonname, - (caddr_t)&sbp->f_mntonname[0], MNAMELEN); bcopy((caddr_t)mp->mnt_stat.f_mntfromname, (caddr_t)&sbp->f_mntfromname[0], MNAMELEN); } diff --git a/sys/vfs/ufs/ufs_lookup.c b/sys/vfs/ufs/ufs_lookup.c index d552f6d9b9..a6f0acdbf0 100644 --- a/sys/vfs/ufs/ufs_lookup.c +++ b/sys/vfs/ufs/ufs_lookup.c @@ -37,7 +37,7 @@ * * @(#)ufs_lookup.c 8.15 (Berkeley) 6/16/95 * $FreeBSD: src/sys/ufs/ufs/ufs_lookup.c,v 1.33.2.7 2001/09/22 19:22:13 iedowse Exp $ - * $DragonFly: src/sys/vfs/ufs/ufs_lookup.c,v 1.16 2004/11/12 00:09:52 dillon Exp $ + * $DragonFly: src/sys/vfs/ufs/ufs_lookup.c,v 1.17 2005/02/02 21:34:19 joerg Exp $ */ #include "opt_ufs.h" @@ -604,7 +604,7 @@ ufs_dirbad(struct inode *ip, doff_t offset, char *how) mp = ITOV(ip)->v_mount; (void)printf("%s: bad dir ino %lu at offset %ld: %s\n", - mp->mnt_stat.f_mntonname, (u_long)ip->i_number, (long)offset, how); + mp->mnt_stat.f_mntfromname, (u_long)ip->i_number, (long)offset, how); if ((mp->mnt_flag & MNT_RDONLY) == 0) panic("ufs_dirbad: bad dir"); } diff --git a/sys/vfs/ufs/ufs_quota.c b/sys/vfs/ufs/ufs_quota.c index e16bedc2bf..d4dbb303da 100644 --- a/sys/vfs/ufs/ufs_quota.c +++ b/sys/vfs/ufs/ufs_quota.c @@ -35,7 +35,7 @@ * * @(#)ufs_quota.c 8.5 (Berkeley) 5/20/95 * $FreeBSD: src/sys/ufs/ufs/ufs_quota.c,v 1.27.2.3 2002/01/15 10:33:32 phk Exp $ - * $DragonFly: src/sys/vfs/ufs/ufs_quota.c,v 1.17 2004/11/12 00:09:52 dillon Exp $ + * $DragonFly: src/sys/vfs/ufs/ufs_quota.c,v 1.18 2005/02/02 21:34:19 joerg Exp $ */ #include @@ -187,7 +187,7 @@ chkdqchg(struct inode *ip, long change, struct ucred *cred, int type) if ((dq->dq_flags & DQ_BLKS) == 0 && ip->i_uid == cred->cr_uid) { uprintf("\n%s: write failed, %s disk limit reached\n", - ITOV(ip)->v_mount->mnt_stat.f_mntonname, + ITOV(ip)->v_mount->mnt_stat.f_mntfromname, quotatypes[type]); dq->dq_flags |= DQ_BLKS; } @@ -203,7 +203,7 @@ chkdqchg(struct inode *ip, long change, struct ucred *cred, int type) VFSTOUFS(ITOV(ip)->v_mount)->um_btime[type]; if (ip->i_uid == cred->cr_uid) uprintf("\n%s: warning, %s %s\n", - ITOV(ip)->v_mount->mnt_stat.f_mntonname, + ITOV(ip)->v_mount->mnt_stat.f_mntfromname, quotatypes[type], "disk quota exceeded"); return (0); } @@ -211,7 +211,7 @@ chkdqchg(struct inode *ip, long change, struct ucred *cred, int type) if ((dq->dq_flags & DQ_BLKS) == 0 && ip->i_uid == cred->cr_uid) { uprintf("\n%s: write failed, %s %s\n", - ITOV(ip)->v_mount->mnt_stat.f_mntonname, + ITOV(ip)->v_mount->mnt_stat.f_mntfromname, quotatypes[type], "disk quota exceeded for too long"); dq->dq_flags |= DQ_BLKS; @@ -300,7 +300,7 @@ chkiqchg(struct inode *ip, long change, struct ucred *cred, int type) if ((dq->dq_flags & DQ_INODS) == 0 && ip->i_uid == cred->cr_uid) { uprintf("\n%s: write failed, %s inode limit reached\n", - ITOV(ip)->v_mount->mnt_stat.f_mntonname, + ITOV(ip)->v_mount->mnt_stat.f_mntfromname, quotatypes[type]); dq->dq_flags |= DQ_INODS; } @@ -316,7 +316,7 @@ chkiqchg(struct inode *ip, long change, struct ucred *cred, int type) VFSTOUFS(ITOV(ip)->v_mount)->um_itime[type]; if (ip->i_uid == cred->cr_uid) uprintf("\n%s: warning, %s %s\n", - ITOV(ip)->v_mount->mnt_stat.f_mntonname, + ITOV(ip)->v_mount->mnt_stat.f_mntfromname, quotatypes[type], "inode quota exceeded"); return (0); } @@ -324,7 +324,7 @@ chkiqchg(struct inode *ip, long change, struct ucred *cred, int type) if ((dq->dq_flags & DQ_INODS) == 0 && ip->i_uid == cred->cr_uid) { uprintf("\n%s: write failed, %s %s\n", - ITOV(ip)->v_mount->mnt_stat.f_mntonname, + ITOV(ip)->v_mount->mnt_stat.f_mntfromname, quotatypes[type], "inode quota exceeded for too long"); dq->dq_flags |= DQ_INODS; diff --git a/sys/vfs/umapfs/umap_vfsops.c b/sys/vfs/umapfs/umap_vfsops.c index db83c0e6ba..680ebfe5eb 100644 --- a/sys/vfs/umapfs/umap_vfsops.c +++ b/sys/vfs/umapfs/umap_vfsops.c @@ -36,7 +36,7 @@ * @(#)umap_vfsops.c 8.8 (Berkeley) 5/14/95 * * $FreeBSD: src/sys/miscfs/umapfs/umap_vfsops.c,v 1.31.2.2 2001/09/11 09:49:53 kris Exp $ - * $DragonFly: src/sys/vfs/umapfs/Attic/umap_vfsops.c,v 1.15 2004/12/17 00:18:46 dillon Exp $ + * $DragonFly: src/sys/vfs/umapfs/Attic/umap_vfsops.c,v 1.16 2005/02/02 21:34:19 joerg Exp $ */ /* @@ -229,16 +229,10 @@ umapfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td) mp->mnt_data = (qaddr_t) amp; vfs_getnewfsid(mp); - (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size); - bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size); (void) copyinstr(args.target, mp->mnt_stat.f_mntfromname, MNAMELEN - 1, &size); bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size); (void)umapfs_statfs(mp, &mp->mnt_stat, td); -#ifdef DEBUG - printf("umapfs_mount: lower %s, alias at %s\n", - mp->mnt_stat.f_mntfromname, mp->mnt_stat.f_mntonname); -#endif return (0); } @@ -352,7 +346,6 @@ umapfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td) sbp->f_ffree = mstat.f_ffree; if (sbp != &mp->mnt_stat) { bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid)); - bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN); bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN); } return (0); diff --git a/sys/vfs/union/union_vfsops.c b/sys/vfs/union/union_vfsops.c index 83ec4530fe..cfd50c70aa 100644 --- a/sys/vfs/union/union_vfsops.c +++ b/sys/vfs/union/union_vfsops.c @@ -36,7 +36,7 @@ * * @(#)union_vfsops.c 8.20 (Berkeley) 5/20/95 * $FreeBSD: src/sys/miscfs/union/union_vfsops.c,v 1.39.2.2 2001/10/25 19:18:53 dillon Exp $ - * $DragonFly: src/sys/vfs/union/union_vfsops.c,v 1.18 2004/12/17 00:18:47 dillon Exp $ + * $DragonFly: src/sys/vfs/union/union_vfsops.c,v 1.19 2005/02/02 21:34:19 joerg Exp $ */ /* @@ -249,9 +249,6 @@ union_mount(struct mount *mp, char *path, caddr_t data, struct thread *td) mp->mnt_data = (qaddr_t) um; vfs_getnewfsid(mp); - (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size); - bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size); - switch (um->um_op) { case UNMNT_ABOVE: cp = ":"; @@ -276,8 +273,6 @@ union_mount(struct mount *mp, char *path, caddr_t data, struct thread *td) (void)union_statfs(mp, &mp->mnt_stat, td); - UDEBUG(("union_mount: from %s, on %s\n", - mp->mnt_stat.f_mntfromname, mp->mnt_stat.f_mntonname)); return (0); bad: @@ -446,7 +441,6 @@ union_statfs(struct mount *mp, struct statfs *sbp, struct thread *td) if (sbp != &mp->mnt_stat) { sbp->f_type = mp->mnt_vfc->vfc_typenum; bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid)); - bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN); bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN); } return (0);