vfs: fix up r351193 ("stop always overwriting ->mnt_stat in VFS_STATFS")

fs-specific part of vfs_statfs routines only fill in small portion of the
structure. Previous code was always copying everything at a higher layer to
acoomodate it and this patch does the same.

'df' (no arguments) worked fine because the caller uses mnt_stat itself as the
target buffer, making all the copying a no-op for its own case.
'df /' and similar use a different consumer which passes its own buffer and
this is where you can run into trouble.

Reported by:	cy
Fixes: r351193
Sponsored by:	The FreeBSD Foundation
This commit is contained in:
mjg 2019-08-19 14:11:54 +00:00
parent 700a658772
commit 2147ca90db

@ -1832,6 +1832,12 @@ int
__vfs_statfs(struct mount *mp, struct statfs *sbp)
{
/*
* Filesystems only fill in part of the structure for updates, we
* have to read the entirety first to get all content.
*/
memcpy(sbp, &mp->mnt_stat, sizeof(*sbp));
/*
* Set these in case the underlying filesystem fails to do so.
*/