Bug#962254: Umask ignored when mounting NFSv4.2 share of an exported Filesystem with noacl (was: Re: Bug#962254: NFS(v4) broken at 4.19.118-2)
On Mon, Jun 15, 2020 at 10:38:20PM -0400, J. Bruce Fields wrote:
> Thanks for the detailed reproducer.
>
> It's weird, as the server is basically just setting the transmitted
> umask and then calling into the vfs to handle the rest, so it's not much
> different from any other user. But the same reproducer run just on the
> ext4 filesystem does give the right permissions....
>
> Oh, but looking at the system call, fs_namei.c:do_mkdirat(), it does:
>
> if (!IS_POSIXACL(path.dentry->d_inode))
> mode &= ~current_umask();
> error = security_path_mkdir(&path, dentry, mode);
> if (!error)
> error = vfs_mkdir(path.dentry->d_inode, dentry, mode);
>
> whereas nfsd just calls into vfs_mkdir().
>
> And that IS_POSIXACL() check is exactly a check whether the filesystem
> supports ACLs. So I guess it's the responsibility of the caller of
> vfs_mkdir() to handle that case.
But, that's unsatisfying: why isn't vfs_mkdir() taking care of this
itself? And what about that security_path_mkdir() call? And are the
other cases of that switch in fs/nfsd/vfs.c:nfsd_create_locked()
correct? I think there may be some more cleanup here called for, I'll
poke around tomorrow.
--b.
Reply to: