diff options
Diffstat (limited to 'fs/nfsd/vfs.c')
| -rw-r--r-- | fs/nfsd/vfs.c | 8 | 
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index d586117fa94..31ff1d642e3 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -401,8 +401,8 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap,  	/* Revoke setuid/setgid on chown */  	if (!S_ISDIR(inode->i_mode) && -	    (((iap->ia_valid & ATTR_UID) && iap->ia_uid != inode->i_uid) || -	     ((iap->ia_valid & ATTR_GID) && iap->ia_gid != inode->i_gid))) { +	    (((iap->ia_valid & ATTR_UID) && !uid_eq(iap->ia_uid, inode->i_uid)) || +	     ((iap->ia_valid & ATTR_GID) && !gid_eq(iap->ia_gid, inode->i_gid)))) {  		iap->ia_valid |= ATTR_KILL_PRIV;  		if (iap->ia_valid & ATTR_MODE) {  			/* we're setting mode too, just clear the s*id bits */ @@ -1205,7 +1205,7 @@ nfsd_create_setattr(struct svc_rqst *rqstp, struct svc_fh *resfhp,  	 * send along the gid on create when it tries to implement  	 * setgid directories via NFS:  	 */ -	if (current_fsuid() != 0) +	if (!uid_eq(current_fsuid(), GLOBAL_ROOT_UID))  		iap->ia_valid &= ~(ATTR_UID|ATTR_GID);  	if (iap->ia_valid)  		return nfsd_setattr(rqstp, resfhp, iap, 0, (time_t)0); @@ -2150,7 +2150,7 @@ nfsd_permission(struct svc_rqst *rqstp, struct svc_export *exp,  	 * with NFSv3.  	 */  	if ((acc & NFSD_MAY_OWNER_OVERRIDE) && -	    inode->i_uid == current_fsuid()) +	    uid_eq(inode->i_uid, current_fsuid()))  		return 0;  	/* This assumes  NFSD_MAY_{READ,WRITE,EXEC} == MAY_{READ,WRITE,EXEC} */  |