NFS: Ensure security label is set for root inode
authorScott Mayhew <smayhew@redhat.com>
Tue, 3 Mar 2020 22:58:37 +0000 (17:58 -0500)
committerPaul Moore <paul@paul-moore.com>
Mon, 30 Mar 2020 23:56:50 +0000 (19:56 -0400)
commit779df6a5480f1307d51b66ea72352be592265cad
treedfd60cf3ed2d28daa3b251b6485e4e5385f3dd6f
parent27978872179b815105082902b22c516359576673
NFS: Ensure security label is set for root inode

When using NFSv4.2, the security label for the root inode should be set
via a call to nfs_setsecurity() during the mount process, otherwise the
inode will appear as unlabeled for up to acdirmin seconds.  Currently
the label for the root inode is allocated, retrieved, and freed entirely
witin nfs4_proc_get_root().

Add a field for the label to the nfs_fattr struct, and allocate & free
the label in nfs_get_root(), where we also add a call to
nfs_setsecurity().  Note that for the call to nfs_setsecurity() to
succeed, it's necessary to also move the logic calling
security_sb_{set,clone}_security() from nfs_get_tree_common() down into
nfs_get_root()... otherwise the SBLABEL_MNT flag will not be set in the
super_block's security flags and nfs_setsecurity() will silently fail.

Reported-by: Richard Haines <richard_c_haines@btinternet.com>
Signed-off-by: Scott Mayhew <smayhew@redhat.com>
Acked-by: Stephen Smalley <sds@tycho.nsa.gov>
Tested-by: Stephen Smalley <sds@tycho.nsa.gov>
[PM: fixed 80-char line width problems]
Signed-off-by: Paul Moore <paul@paul-moore.com>
fs/nfs/getroot.c
fs/nfs/nfs4proc.c
fs/nfs/super.c
include/linux/nfs_xdr.h