Some filesystems (like cd9660 and ext3) require that VFS_STATFS()

be called before VFS_ROOT() is called. Move the call for VFS_STATFS()
so that it is done after VFS_MOUNT(), but before VFS_ROOT().
This change actually improves the robustness of the mount system
call because it returns an error rather than failing silently
when VFS_STATFS() returns failure.

Reported by:  Rebecca Cran <rebecca@bluestop.org>
Sponsored by: Netflix
This commit is contained in:
Kirk McKusick 2018-12-21 01:09:25 +00:00
parent ad025209ba
commit 13c31c29ca
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=342290

View File

@ -895,6 +895,7 @@ vfs_domount_first(
*/
error1 = 0;
if ((error = VFS_MOUNT(mp)) != 0 ||
(error1 = VFS_STATFS(mp, &mp->mnt_stat)) != 0 ||
(error1 = VFS_ROOT(mp, LK_EXCLUSIVE, &newdp)) != 0) {
if (error1 != 0) {
error = error1;
@ -916,7 +917,6 @@ vfs_domount_first(
vfs_freeopts(mp->mnt_opt);
mp->mnt_opt = mp->mnt_optnew;
*optlist = NULL;
(void)VFS_STATFS(mp, &mp->mnt_stat);
/*
* Prevent external consumers of mount options from reading mnt_optnew.