From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2155) id D5DE138708C5; Fri, 10 Jul 2020 08:30:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D5DE138708C5 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Corinna Vinschen To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin] Fix invalid acl_entry_t on 32-bit Cygwin X-Act-Checkin: newlib-cygwin X-Git-Author: David Allsopp X-Git-Refname: refs/heads/master X-Git-Oldrev: 462fcdb67f21c4806641c1cbbe0bc01a11d5ce44 X-Git-Newrev: acfc63b0cf0df472a8e17df1bf5a2c8284e28833 Message-Id: <20200710083039.D5DE138708C5@sourceware.org> Date: Fri, 10 Jul 2020 08:30:39 +0000 (GMT) X-BeenThere: cygwin-cvs@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin core component git logs List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 08:30:40 -0000 https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=acfc63b0cf0df472a8e17df1bf5a2c8284e28833 commit acfc63b0cf0df472a8e17df1bf5a2c8284e28833 Author: David Allsopp Date: Thu Jul 9 20:17:03 2020 +0100 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 Diff: --- winsup/cygwin/release/3.1.7 | 4 ++++ winsup/cygwin/sec_posixacl.h | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) 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)))