From 77ba4b2141d04180211efa8a75c11ab0abf7fafb Mon Sep 17 00:00:00 2001 From: yangsheng <yangsheng> Date: Fri, 20 Jun 2008 05:48:44 +0000 Subject: [PATCH] Branch b1_8 b=15593 i=shadow, johann Force to remove SUID when the do_truncate() be called in 2.6.22 kernel. --- lustre/llite/llite_lib.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c index 80e472da04..65fe307c92 100644 --- a/lustre/llite/llite_lib.c +++ b/lustre/llite/llite_lib.c @@ -1532,9 +1532,19 @@ int ll_setattr_raw(struct inode *inode, struct iattr *attr) int ll_setattr(struct dentry *de, struct iattr *attr) { + int mode; + if ((attr->ia_valid & (ATTR_CTIME|ATTR_SIZE|ATTR_MODE)) == (ATTR_CTIME|ATTR_SIZE|ATTR_MODE)) attr->ia_valid |= MDS_OPEN_OWNEROVERRIDE; + if ((attr->ia_valid & (ATTR_MODE|ATTR_FORCE|ATTR_SIZE)) == + (ATTR_SIZE|ATTR_MODE)) { + mode = de->d_inode->i_mode; + if (((mode & S_ISUID) && (!(attr->ia_mode & S_ISUID))) || + ((mode & S_ISGID) && (mode & S_IXGRP) && + (!(attr->ia_mode & S_ISGID)))) + attr->ia_valid |= ATTR_FORCE; + } return ll_setattr_raw(de->d_inode, attr); } -- GitLab