|
@@ -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} */
|