|
@@ -368,10 +368,11 @@ static void munge_mode_uid_gid(const struct gfs2_inode *dip,
|
|
|
struct inode *inode)
|
|
|
{
|
|
|
if (GFS2_SB(&dip->i_inode)->sd_args.ar_suiddir &&
|
|
|
- (dip->i_inode.i_mode & S_ISUID) && dip->i_inode.i_uid) {
|
|
|
+ (dip->i_inode.i_mode & S_ISUID) &&
|
|
|
+ !uid_eq(dip->i_inode.i_uid, GLOBAL_ROOT_UID)) {
|
|
|
if (S_ISDIR(inode->i_mode))
|
|
|
inode->i_mode |= S_ISUID;
|
|
|
- else if (dip->i_inode.i_uid != current_fsuid())
|
|
|
+ else if (!uid_eq(dip->i_inode.i_uid, current_fsuid()))
|
|
|
inode->i_mode &= ~07111;
|
|
|
inode->i_uid = dip->i_inode.i_uid;
|
|
|
} else
|
|
@@ -978,8 +979,8 @@ static int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name,
|
|
|
return -EPERM;
|
|
|
|
|
|
if ((dip->i_inode.i_mode & S_ISVTX) &&
|
|
|
- dip->i_inode.i_uid != current_fsuid() &&
|
|
|
- ip->i_inode.i_uid != current_fsuid() && !capable(CAP_FOWNER))
|
|
|
+ !uid_eq(dip->i_inode.i_uid, current_fsuid()) &&
|
|
|
+ !uid_eq(ip->i_inode.i_uid, current_fsuid()) && !capable(CAP_FOWNER))
|
|
|
return -EPERM;
|
|
|
|
|
|
if (IS_APPEND(&dip->i_inode))
|
|
@@ -1589,16 +1590,17 @@ static int setattr_chown(struct inode *inode, struct iattr *attr)
|
|
|
nuid = attr->ia_uid;
|
|
|
ngid = attr->ia_gid;
|
|
|
|
|
|
- if (!(attr->ia_valid & ATTR_UID) || ouid == nuid)
|
|
|
+ if (!(attr->ia_valid & ATTR_UID) || uid_eq(ouid, nuid))
|
|
|
ouid = nuid = NO_UID_QUOTA_CHANGE;
|
|
|
- if (!(attr->ia_valid & ATTR_GID) || ogid == ngid)
|
|
|
+ if (!(attr->ia_valid & ATTR_GID) || gid_eq(ogid, ngid))
|
|
|
ogid = ngid = NO_GID_QUOTA_CHANGE;
|
|
|
|
|
|
error = gfs2_quota_lock(ip, nuid, ngid);
|
|
|
if (error)
|
|
|
return error;
|
|
|
|
|
|
- if (ouid != NO_UID_QUOTA_CHANGE || ogid != NO_GID_QUOTA_CHANGE) {
|
|
|
+ if (!uid_eq(ouid, NO_UID_QUOTA_CHANGE) ||
|
|
|
+ !gid_eq(ogid, NO_GID_QUOTA_CHANGE)) {
|
|
|
error = gfs2_quota_check(ip, nuid, ngid);
|
|
|
if (error)
|
|
|
goto out_gunlock_q;
|
|
@@ -1612,7 +1614,8 @@ static int setattr_chown(struct inode *inode, struct iattr *attr)
|
|
|
if (error)
|
|
|
goto out_end_trans;
|
|
|
|
|
|
- if (ouid != NO_UID_QUOTA_CHANGE || ogid != NO_GID_QUOTA_CHANGE) {
|
|
|
+ if (!uid_eq(ouid, NO_UID_QUOTA_CHANGE) ||
|
|
|
+ !gid_eq(ogid, NO_GID_QUOTA_CHANGE)) {
|
|
|
u64 blocks = gfs2_get_inode_blocks(&ip->i_inode);
|
|
|
gfs2_quota_change(ip, -blocks, ouid, ogid);
|
|
|
gfs2_quota_change(ip, blocks, nuid, ngid);
|