diff options
author | David Allsopp <david.allsopp@metastack.com> | 2020-07-09 22:17:03 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2020-07-10 11:29:47 +0300 |
commit | acfc63b0cf0df472a8e17df1bf5a2c8284e28833 (patch) | |
tree | 5580eb6e5f3a1fd8cc2902dfddeed66c51dddc62 /winsup | |
parent | 462fcdb67f21c4806641c1cbbe0bc01a11d5ce44 (diff) |
Fix invalid acl_entry_t on 32-bit Cygwin
If the acl_t struct was at or above 0x80000000 then the pointer was
sign-extended to 0xffff_ffff_8000_0000 and so the index was lost.
Signed-off-by: David Allsopp <david.allsopp@metastack.com>
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/cygwin/release/3.1.7 | 4 | ||||
-rw-r--r-- | winsup/cygwin/sec_posixacl.h | 2 |
2 files changed, 5 insertions, 1 deletions
diff --git a/winsup/cygwin/release/3.1.7 b/winsup/cygwin/release/3.1.7 new file mode 100644 index 000000000..6ce316fc4 --- /dev/null +++ b/winsup/cygwin/release/3.1.7 @@ -0,0 +1,4 @@ +Bug Fixes: +---------- + +- Fix acl_get_* functions in 32-bit Cygwin (pointer sign extension) diff --git a/winsup/cygwin/sec_posixacl.h b/winsup/cygwin/sec_posixacl.h index a3790a52b..0f9e7bde3 100644 --- a/winsup/cygwin/sec_posixacl.h +++ b/winsup/cygwin/sec_posixacl.h @@ -34,7 +34,7 @@ struct __acl_t inline acl_entry_t __to_entry (acl_t acl, uint16_t idx) { - return ((uint64_t) idx << 48) | (uint64_t) acl; + return ((uint64_t) idx << 48) | (uint64_t) ((uintptr_t) acl); } #define __to_permset(a,i) ((acl_permset_t)__to_entry((a),(i))) |