On Mon, Jul 11, 2016 at 04:39:05PM -0400, Ted Unangst wrote:
> Tim Newsham wrote:
> > The tmpfs filesystem allows the mounting user to specify a
> > username, a groupname or a device name for the root node of
> > the filesystem.  A user that specifies a value of VNOVAL for
> > any of these fields will trigger an assert in tmpfs_alloc_node():
> > 
> >     /* XXX pedro: we should check for UID_MAX and GID_MAX instead. */
> >     KASSERT(uid != VNOVAL && gid != VNOVAL && mode != VNOVAL);
> 
> sigh. i don't know what else can trigger that kassert, so just fix the caller
> to do the same check and return an error.
> 
> Index: tmpfs_vfsops.c
> ===================================================================
> RCS file: /cvs/src/sys/tmpfs/tmpfs_vfsops.c,v
> retrieving revision 1.8
> diff -u -p -r1.8 tmpfs_vfsops.c
> --- tmpfs_vfsops.c    13 Jan 2016 13:01:40 -0000      1.8
> +++ tmpfs_vfsops.c    11 Jul 2016 20:37:30 -0000
> @@ -125,6 +125,9 @@ tmpfs_mount(struct mount *mp, const char
>       error = copyin(data, &args, sizeof(struct tmpfs_args));
>       if (error)
>               return error;
> +     if (args.ta_root_uid == VNOVAL || args.ta_root_gid == VNOVAL ||
> +         (args.ta_root_mode & ALLPERMS) == VNOVAL)
> +             return EINVAL;

ta_root_mode contains the S_IFDIR format bit (not included in ALLPERMS)
when using mount_tmpfs(8) with the default arguments.

With the last check changed to (args.ta_root_mode == VNOVAL), OK natano@.


>  
>       /* Get the memory usage limit for this file-system. */
>       if (args.ta_size_max < PAGE_SIZE) {
> 

Reply via email to