1
linux/fs/nfsd
Jeff Layton ca456252db knfsd: clear both setuid and setgid whenever a chown is done
Currently, knfsd only clears the setuid bit if the owner of a file is
changed on a SETATTR call, and only clears the setgid bit if the group
is changed. POSIX says this in the spec for chown():

    "If the specified file is a regular file, one or more of the
     S_IXUSR, S_IXGRP, or S_IXOTH bits of the file mode are set, and the
     process does not have appropriate privileges, the set-user-ID
     (S_ISUID) and set-group-ID (S_ISGID) bits of the file mode shall
     be cleared upon successful return from chown()."

If I'm reading this correctly, then knfsd is doing this wrong. It should
be clearing both the setuid and setgid bit on any SETATTR that changes
the uid or gid. This wasn't really as noticable before, but now that the
ATTR_KILL_S*ID bits are a no-op for the NFS client, it's more evident.

This patch corrects the nfsd_setattr logic so that this occurs. It also
does a bit of cleanup to the function.

There is also one small behavioral change. If a SETATTR call comes in
that changes the uid/gid and the mode, then we now only clear the setgid
bit if the group execute bit isn't set. The setgid bit without a group
execute bit signifies mandatory locking and we likely don't want to
clear the bit in that case. Since there is no call in POSIX that should
generate a SETATTR call like this, then this should rarely happen, but
it's worth noting.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
2008-04-23 16:13:43 -04:00
..
auth.c nfsd: fix sparse warnings 2008-04-23 16:13:39 -04:00
auth.h nfsd: minor fs/nfsd/auth.h cleanup 2008-02-01 16:42:05 -05:00
export.c IPv6 support for NFS server export caches 2008-04-23 16:13:36 -04:00
lockd.c
Makefile
nfs2acl.c nfsd: Fix inconsistent assignment 2008-02-01 16:42:01 -05:00
nfs3acl.c knfsd: fix spurious EINVAL errors on first access of new filesystem 2007-11-12 14:28:08 -08:00
nfs3proc.c Use struct path in struct svc_export 2008-02-14 21:17:08 -08:00
nfs3xdr.c Use struct path in struct svc_export 2008-02-14 21:17:08 -08:00
nfs4acl.c
nfs4callback.c nfsd: use static memory for callback program and stats 2008-04-23 16:13:42 -04:00
nfs4idmap.c nfsd: fix sparse warnings 2008-04-23 16:13:39 -04:00
nfs4proc.c [PATCH] r/o bind mounts: elevate write count for xattr_permission() callers 2008-04-19 00:29:15 -04:00
nfs4recover.c [PATCH] r/o bind mounts: get callers of vfs_mknod/create/mkdir() 2008-04-19 00:25:34 -04:00
nfs4state.c nfsd: initialize lease type in nfs4_open_delegation() 2008-04-23 16:13:40 -04:00
nfs4xdr.c nfsd: clarify readdir/mountpoint-crossing code 2008-04-23 16:13:38 -04:00
nfscache.c nfsd: fail module init on reply cache init failure 2008-02-01 16:42:04 -05:00
nfsctl.c nfsd: fix sparse warnings 2008-04-23 16:13:39 -04:00
nfsfh.c nfsd: move most of fh_verify to separate function 2008-04-23 16:13:41 -04:00
nfsproc.c Use struct path in struct svc_export 2008-02-14 21:17:08 -08:00
nfssvc.c NFSD: Remove NFSD_TCP kernel build option 2008-04-23 16:13:38 -04:00
nfsxdr.c Use struct path in struct svc_export 2008-02-14 21:17:08 -08:00
stats.c
vfs.c knfsd: clear both setuid and setgid whenever a chown is done 2008-04-23 16:13:43 -04:00