summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2022-12-27 20:00:58 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2022-12-27 20:01:33 -0800
commitd65e5a8ba77595a598c9ddb8dfa09c4aea732659 (patch)
treeb82ff3d0fec26e92dd4b9d39f766d8ac95eb2828 /lib
parent6f8db599ab511c957f87e44dbaf5abe4b55a79bc (diff)
downloadgnulib-d65e5a8ba77595a598c9ddb8dfa09c4aea732659.tar.gz
file-has-acl: fix recently-introduced NFSv4 bug
* lib/file-has-acl.c (acl_nfs4_nontrivial): Fix off-by-one error when rounding WHOLEN up to next multiple of 4. Pacify GCC 12.2.1 -Wcast-align.
Diffstat (limited to 'lib')
-rw-r--r--lib/file-has-acl.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/file-has-acl.c b/lib/file-has-acl.c
index 676523ba82..7876edc4f0 100644
--- a/lib/file-has-acl.c
+++ b/lib/file-has-acl.c
@@ -81,9 +81,10 @@ acl_nfs4_nontrivial (uint32_t *xattr, ssize_t nbytes)
uint32_t flag = ntohl (xattr[1]);
uint32_t wholen = ntohl (xattr[3]);
xattr += 4;
- int64_t wholen4 = wholen;
- wholen4 = ((wholen4 + (BYTES_PER_NETWORK_UINT))
- & ~ (BYTES_PER_NETWORK_UINT - 1));
+ int whowords = (wholen / BYTES_PER_NETWORK_UINT
+ + (wholen % BYTES_PER_NETWORK_UINT != 0));
+ int64_t wholen4 = whowords;
+ wholen4 *= BYTES_PER_NETWORK_UINT;
/* Trivial ACLs have only ACE4_ACCESS_ALLOWED_ACE_TYPE or
ACE4_ACCESS_DENIED_ACE_TYPE. */
@@ -115,7 +116,7 @@ acl_nfs4_nontrivial (uint32_t *xattr, ssize_t nbytes)
return 1;
ace_found |= ace_found_bit;
- xattr = (uint32_t *) ((char *) xattr + wholen4);
+ xattr += whowords;
}
return 0;