fspacectl(2) does not require special handling on freebsd32. The
presence of off_t in a struct does not cause it's size to change
between the native ABI and the 32-bit ABI supported by freebsd32
because off_t is always int64_t on BSD systems. Situations requiring
special handling may arise for i386 if and off_t is proceeded by an
8-byte aligned int, but that situation does not appaly. Further, byte
order only requires handling for paired argument or return registers.
As a result of the removal of freebsd32_fspacectl, move the copyin
and copyout calls to kern_fspacectl and only copy out rmsr if we've
called fo_fspacectl. Also, return EFAULT rather than EINVAL when
rqsr is NULL (matching the documentation).
The copyout change fixes a 16-byte kernel stack leak when rqsr is
NULL and rmsr is not. This bug is not present in any stable branch.
Security: 16-byte kernel stack leak