return rc;
 }
 
+
+static void ksmbd_acls_fattr(struct smb_fattr *fattr, struct inode *inode)
+{
+       fattr->cf_uid = inode->i_uid;
+       fattr->cf_gid = inode->i_gid;
+       fattr->cf_mode = inode->i_mode;
+       fattr->cf_dacls = NULL;
+
+       fattr->cf_acls = ksmbd_vfs_get_acl(inode, ACL_TYPE_ACCESS);
+       if (S_ISDIR(inode->i_mode))
+               fattr->cf_dacls = ksmbd_vfs_get_acl(inode, ACL_TYPE_DEFAULT);
+}
+
 /**
  * smb2_open() - handler for smb file open request
  * @work:      smb work containing request buffer
                                                           KSMBD_SHARE_FLAG_ACL_XATTR)) {
                                        struct smb_fattr fattr;
                                        struct smb_ntsd *pntsd;
-                                       int pntsd_size, ace_num;
-
-                                       fattr.cf_uid = inode->i_uid;
-                                       fattr.cf_gid = inode->i_gid;
-                                       fattr.cf_mode = inode->i_mode;
-                                       fattr.cf_dacls = NULL;
-                                       ace_num = 0;
+                                       int pntsd_size, ace_num = 0;
 
-                                       fattr.cf_acls = ksmbd_vfs_get_acl(inode, ACL_TYPE_ACCESS);
+                                       ksmbd_acls_fattr(&fattr, inode);
                                        if (fattr.cf_acls)
                                                ace_num = fattr.cf_acls->a_count;
-                                       if (S_ISDIR(inode->i_mode)) {
-                                               fattr.cf_dacls =
-                                                       ksmbd_vfs_get_acl(inode, ACL_TYPE_DEFAULT);
-                                               if (fattr.cf_dacls)
-                                                       ace_num += fattr.cf_dacls->a_count;
-                                       }
+                                       if (fattr.cf_dacls)
+                                               ace_num += fattr.cf_dacls->a_count;
 
                                        pntsd = kmalloc(sizeof(struct smb_ntsd) +
                                                        sizeof(struct smb_sid) * 3 +
 
                                        rc = ksmbd_vfs_set_sd_xattr(conn,
                                                path.dentry, pntsd, pntsd_size);
+                                       kfree(pntsd);
                                        if (rc)
                                                ksmbd_err("failed to store ntacl in xattr : %d\n",
                                                                rc);
                return -ENOENT;
 
        inode = FP_INODE(fp);
-       fattr.cf_uid = inode->i_uid;
-       fattr.cf_gid = inode->i_gid;
-       fattr.cf_mode = inode->i_mode;
-       fattr.cf_dacls = NULL;
-
-       fattr.cf_acls = ksmbd_vfs_get_acl(inode, ACL_TYPE_ACCESS);
-       if (S_ISDIR(inode->i_mode))
-               fattr.cf_dacls = ksmbd_vfs_get_acl(inode, ACL_TYPE_DEFAULT);
+       ksmbd_acls_fattr(&fattr, inode);
 
        if (test_share_config_flag(work->tcon->share_conf,
                                   KSMBD_SHARE_FLAG_ACL_XATTR))