NFSD: Check acl returned from get_acl/posix_acl_from_mode
Subsystems (2)
PATCH 1/1 NFSD: Check acl returned from get_acl/posix_acl_from_mode
Commit 4ac7249ea5 (nfsd: use get_acl and ->set_acl) don't check the acl returned from get_acl()/posix_acl_from_mode().
Signed-off-by Kinglong Mee <[email protected]>
--- fs/nfsd/nfs2acl.c | 8 ++++---- fs/nfsd/nfs3acl.c | 8 ++++---- fs/nfsd/nfs4acl.c | 19 +++++++++++++------ 3 files changed, 21 insertions(+), 14 deletions(-)
fs/nfsd/nfs2acl.c +4 -4
@@ -54,14 +54,14 @@ static __be32 nfsacld_proc_getacl(struct svc_rqst * rqstp,if (resp->mask & (NFS_ACL |NFS_ACLCNT )) { acl =get_acl (inode,ACL_TYPE_ACCESS ); -if (IS_ERR (acl)) { - nfserr =nfserrno (PTR_ERR (acl)); - goto fail; - }if (acl ==NULL ) {/* Solaris returns the inode's minimum ACL. */ acl =posix_acl_from_mode (inode->i_mode,GFP_KERNEL ); } +if (IS_ERR (acl)) { + nfserr =nfserrno (PTR_ERR (acl)); + goto fail; + } resp->acl_access = acl; }if (resp->mask & (NFS_DFACL |NFS_DFACLCNT )) {
fs/nfsd/nfs3acl.c +4 -4
@@ -47,14 +47,14 @@ static __be32 nfsd3_proc_getacl(struct svc_rqst * rqstp,if (resp->mask & (NFS_ACL |NFS_ACLCNT )) { acl =get_acl (inode,ACL_TYPE_ACCESS ); -if (IS_ERR (acl)) { - nfserr =nfserrno (PTR_ERR (acl)); - goto fail; - }if (acl ==NULL ) {/* Solaris returns the inode's minimum ACL. */ acl =posix_acl_from_mode (inode->i_mode,GFP_KERNEL ); } +if (IS_ERR (acl)) { + nfserr =nfserrno (PTR_ERR (acl)); + goto fail; + } resp->acl_access = acl; }if (resp->mask & (NFS_DFACL |NFS_DFACLCNT )) {
fs/nfsd/nfs4acl.c +13 -6
@@ -146,17 +146,23 @@ nfsd4_get_nfs4_acl(struct svc_rqst *rqstp, struct dentry *dentry,int size =0 ; pacl =get_acl (inode,ACL_TYPE_ACCESS ); -if (!pacl) { +if (!pacl) pacl =posix_acl_from_mode (inode->i_mode,GFP_KERNEL ); -if (IS_ERR (pacl)) -return PTR_ERR (pacl); - } + +if (IS_ERR (pacl)) +return PTR_ERR (pacl); +/* allocate for worst case: one (deny, allow) pair each: */ size +=2 * pacl->a_count;if (S_ISDIR (inode->i_mode)) { flags =NFS4_ACL_DIR ; dpacl =get_acl (inode,ACL_TYPE_DEFAULT ); +if (IS_ERR (dpacl)) { + error =PTR_ERR (dpacl); + goto rel_pacl; + } +if (dpacl) size +=2 * dpacl->a_count; }
@@ -173,9 +179,10 @@ nfsd4_get_nfs4_acl(struct svc_rqst *rqstp, struct dentry *dentry,if (dpacl)_posix_to_nfsv4_one (dpacl, *acl, flags |NFS4_ACL_TYPE_DEFAULT ); - out: -posix_acl_release (pacl); +out:posix_acl_release (dpacl); +rel_pacl: +posix_acl_release (pacl);return error; }
Signature · 1 line
1.9.3
Quoted 4 lines · Kinglong Mee
Commit
4ac7249ea5(nfsd: useget_acland ->set_acl) don't check the acl returned from get_acl()/posix_acl_from_mode().Signed-off-by Kinglong Mee <[email protected]>
Looks good,
Reviewed-by Christoph Hellwig <[email protected]>
Quoted 9 lines · Christoph Hellwig
Quoted 4 lines · Kinglong Mee
Commit
4ac7249ea5(nfsd: useget_acland ->set_acl) don't check the acl returned from get_acl()/posix_acl_from_mode().Signed-off-by Kinglong Mee <[email protected]>Looks good,
Reviewed-by Christoph Hellwig <[email protected]>
Thanks, applying for 3.17.
--b.