diff options
| -rw-r--r-- | xlators/system/posix-acl/src/posix-acl.c | 6 | 
1 files changed, 6 insertions, 0 deletions
diff --git a/xlators/system/posix-acl/src/posix-acl.c b/xlators/system/posix-acl/src/posix-acl.c index a3570c0b2bf..f067e91babe 100644 --- a/xlators/system/posix-acl/src/posix-acl.c +++ b/xlators/system/posix-acl/src/posix-acl.c @@ -1517,12 +1517,16 @@ posix_acl_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,                      off_t offset, dict_t *dict)  {          int ret = 0; +	dict_t *alloc_dict = NULL;          if (acl_permits (frame, fd->inode, POSIX_ACL_READ))                  goto green;          else                  goto red;  green: +	if (!dict) +		dict = alloc_dict = dict_new (); +          if (dict) {                  ret = dict_set_int8 (dict, POSIX_ACL_ACCESS_XATTR, 0);                  if (ret) @@ -1541,6 +1545,8 @@ green:                      FIRST_CHILD(this), FIRST_CHILD(this)->fops->readdirp,                      fd, size, offset, dict); +	if (alloc_dict) +		dict_unref (alloc_dict);          return 0;  red:          STACK_UNWIND_STRICT (readdirp, frame, -1, EACCES, NULL, NULL);  | 
