On 4/29/14, H??ctor Luis Gimbatti <[email protected]> wrote:
> The constant MFSNAMELEN as defined in: 
> 
> lib/libc/sys/getfsstat.2:#define MFSNAMELEN   16 
> lib/libc/sys/statfs.2:#define MFSNAMELEN   16
> sys/sys/mount.h: #define MFSNAMELEN      16
> 
> defines the fs type name and, according to comments, it includes nul
> terminating character.
> 
>  The following code makes uses of strncpy and involves MFSNAMELEN
> 
> ./sys/kern/vfs_subr.c:225:      strncpy(mp->mnt_stat.f_fstypename,
> vfsp->vfc_name, MFSNAMELEN);
> ./sys/kern/vfs_subr.c:2272:     strncpy(sbp->f_fstypename,
> mp->mnt_vfc->vfc_name, MFSNAMELEN);
> ./sys/kern/vfs_syscalls.c:243:  strncpy(mp->mnt_stat.f_fstypename,
> vfsp->vfc_name, MFSNAMELEN);
> ./sys/miscfs/procfs/procfs_vfsops.c:190:        strncpy(sbp->f_fstypename,
> mp->mnt_vfc->vfc_name, MFSNAMELEN);
> ./sys/msdosfs/msdosfs_vfsops.c:669:     strncpy(sbp->f_fstypename,
> mp->mnt_vfc->vfc_name, MFSNAMELEN);
> ./sys/nfs/nfs_vfsops.c:646:     strncpy(&mp->mnt_stat.f_fstypename[0],
> mp->mnt_vfc->vfc_name, MFSNAMELEN);
> ./sys/ntfs/ntfs_vfsops.c:628:   strncpy(sbp->f_fstypename,
> mp->mnt_vfc->vfc_name, MFSNAMELEN);
> ./sys/ufs/ext2fs/ext2fs_vfsops.c:704:   strncpy(sbp->f_fstypename,
> mp->mnt_vfc->vfc_name, MFSNAMELEN);
> ./sys/ufs/mfs/mfs_vfsops.c:222: strncpy(&sbp->f_fstypename[0],
> mp->mnt_vfc->vfc_name, MFSNAMELEN);
> 
> 
> Can be those replace safely by strlcpy without any modification to
> MFSNAMELEN constant? 

I thought I had seen someone reply to this on tech@ but
I can't find any evidence of that. So... *ping*?


Most places use strn{cmp,cpy} except for compat/linux/linux_misc.c
so it "seems" OK. However, OP's grep missed the following usage
which (I imagine) expects a nul-terminated c-string:

sys/kern/vfs_subr.c in vfs_mount_print()

        (*pr)("  fstype \"%s\" mnton \"%s\" mntfrom \"%s\" mntspec \"%s\"\n",
            mp->mnt_stat.f_fstypename, mp->mnt_stat.f_mntonname,
            mp->mnt_stat.f_mntfromname, mp->mnt_stat.f_mntfromspec);

Called from ddb/db_command.c: db_show_all_{mount,vnode}s()

Producing a patch as OP suggested is simple enough, but
testing for regression is a bit of an unknown to me.

--patrick

Reply via email to