Skip to content
  • Rick Macklem's avatar
    Fix export_args ex_flags field so that is 64bits, the same as mnt_flags. · 1f7104d7
    Rick Macklem authored
    Since mnt_flags was upgraded to 64bits there has been a quirk in
    "struct export_args", since it hold a copy of mnt_flags
    in ex_flags, which is an "int" (32bits).
    This happens to currently work, since all the flag bits used in ex_flags are
    defined in the low order 32bits. However, new export flags cannot be defined.
    Also, ex_anon is a "struct xucred", which limits it to 16 additional groups.
    This patch revises "struct export_args" to make ex_flags 64bits and replaces
    ex_anon with ex_uid, ex_ngroups and ex_groups (which points to a
    groups list, so it can be malloc'd up to NGROUPS in size.
    This requires that the VFS_CHECKEXP() arguments change, so I also modified the
    last "secflavors" argument to be an array pointer, so that the
    secflavors could be copied in VFS_CHECKEXP() while the export entry is locked.
    (Without this patch VFS_CHECKEXP() returns a pointer to the secflavors
    array and then it is used after being unlocked, which is potentially
    a problem if the exports entry is changed.
    In practice this does not occur when mountd is run with "-S",
    but I think it is worth fixing.)
    
    This patch also deleted the vfs_oexport_conv() function, since
    do_mount_update() does the conversion, as required by the old vfs_cmount()
    calls.
    
    Reviewed by:	kib, freqlabs
    Relnotes:	yes
    Differential Revision:	https://reviews.freebsd.org/D25088
    1f7104d7