Currently we are checking file mode after getxattr call. Due to this the return value would be 0, which would change the getxattr return value. As xattr_size will be 0, nfs4_getfacl will fail with error EINVAL. This patch fixes this issue by moving the file mode check before getxattr call. Signed-off-by: Kenneth D'souza <kdsouza@xxxxxxxxxx> --- libnfs4acl/nfs4_getacl.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libnfs4acl/nfs4_getacl.c b/libnfs4acl/nfs4_getacl.c index 7821da3..f9c5831 100644 --- a/libnfs4acl/nfs4_getacl.c +++ b/libnfs4acl/nfs4_getacl.c @@ -39,6 +39,13 @@ static struct nfs4_acl *nfs4_getacl_byname(const char *path, return NULL; } + ret = stat(path, &st); + if (ret == -1) + goto err_free; + + if (S_ISDIR(st.st_mode)) + iflags = NFS4_ACL_ISDIR; + /* find necessary buffer size */ ret = getxattr(path, xattr_name, NULL, 0); if (ret == -1) @@ -53,13 +60,6 @@ static struct nfs4_acl *nfs4_getacl_byname(const char *path, if (ret == -1) goto err_free; - ret = stat(path, &st); - if (ret == -1) - goto err_free; - - if (S_ISDIR(st.st_mode)) - iflags = NFS4_ACL_ISDIR; - acl = acl_nfs41_xattr_load(buf, ret, iflags, type); free(buf); -- 2.31.1