From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liuwenyi Subject: [PATCHv2 06/12]posix_acl: Add the check items Date: Mon, 21 Dec 2009 19:58:11 +0800 Message-ID: <4B2F62D3.6020309@gmail.com> Reply-To: qingshenlwy@gmail.com Mime-Version: 1.0 Content-Type: text/plain; charset=GB2312 Content-Transfer-Encoding: 7bit To: viro@zeniv.linux.org.uk, hch@lst.de, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, strongzgy@gmail.com, onlyflyer@gmail.com Return-path: Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org move the ACL validation check in to fs/posix_acl.c. Including nullpointer check and PTR_ERR check. --- Signed-off-by: Liuwenyi Cc: Alexander Viro Cc: Christoph Hellwig Cc: linux-fsdevel@vger.kernel.org Cc: linux-kernel@vger.kernel.org --- diff --git a/fs/generic_acl.c b/fs/generic_acl.c index 5545803..5d88218 100644 --- a/fs/generic_acl.c +++ b/fs/generic_acl.c @@ -68,6 +68,7 @@ generic_acl_set(struct dentry *dentry, const char *name, const void *value, struct inode *inode = dentry->d_inode; struct posix_acl *acl = NULL; int error; + mode_t mode; if (strcmp(name, "") != 0) return -EINVAL; @@ -80,32 +81,31 @@ generic_acl_set(struct dentry *dentry, const char *name, const void *value, if (IS_ERR(acl)) return PTR_ERR(acl); } - if (acl) { - mode_t mode; - error = posix_acl_valid(acl); - if (error) + error = posix_acl_valid(acl); + if (error) + goto failed; + + switch (type) { + case ACL_TYPE_ACCESS: + mode = inode->i_mode; + error = posix_acl_equiv_mode(acl, &mode); + if (error < 0) goto failed; - switch (type) { - case ACL_TYPE_ACCESS: - mode = inode->i_mode; - error = posix_acl_equiv_mode(acl, &mode); - if (error < 0) - goto failed; - inode->i_mode = mode; - if (error == 0) { - posix_acl_release(acl); - acl = NULL; - } - break; - case ACL_TYPE_DEFAULT: - if (!S_ISDIR(inode->i_mode)) { - error = -EINVAL; - goto failed; - } - break; + inode->i_mode = mode; + if (error == 0) { + posix_acl_release(acl); + acl = NULL; } + break; + case ACL_TYPE_DEFAULT: + if (!S_ISDIR(inode->i_mode)) { + error = -EINVAL; + goto failed; + } + break; } + set_cached_acl(inode, type, acl); error = 0; failed: -- Best Regards, Liuwenyi