On 2025-10-26 04:10, Pip Cet via Cygwin wrote:
Pip Cet <[email protected]> writes:

This is about a bug which was observed when running msys2 binaries in
Wine under recent Linux kernels on new Intel/AMD CPUs that support the
PKU/PKRU feature, but it appears to be a bug in Cygwin; specifically,
in:

I don't think this was ever merged, but I'm not aware of any remaining
objections. Rebased patch follows:

 From 7ed7da412248ec0b2d27157980d4c2f6fe63398c Mon Sep 17 00:00:00 2001
From: Pip Cet <[email protected]>
Date: Sun, 26 Oct 2025 10:01:33 +0000
Subject: [PATCH] Cygwin: Fix segfault when XSAVE area sizes are unaligned

On recent AMD and Intel CPUs, the PKU/PKRU feature reports an XSAVE
storage area of just 8 bytes. This is exposed to Cygwin code when we
run in Wine under Linux.

The xsave64 instruction requires a memory area aligned to 64 bytes; in
the setting above, we would no longer meet that requirement, causing
segfaults and abnormal program termination.

This fix aligns the size of the structure we allocate on the stack
before performing an xsave64 to the next 64-byte multiple; the old
code already guarantees that structures of such size are aligned
properly for xsave64. This fixes the issue on Linux and hopefully
avoid it on future Windows systems which expose such features.

Signed-off-by: Pip Cet <[email protected]>
---
  winsup/cygwin/scripts/gendef | 2 ++
  1 file changed, 2 insertions(+)

diff --git a/winsup/cygwin/scripts/gendef b/winsup/cygwin/scripts/gendef
index d60d45431..2dc9bce53 100755
--- a/winsup/cygwin/scripts/gendef
+++ b/winsup/cygwin/scripts/gendef
@@ -243,6 +243,8 @@ sigdelayed:
        xorl    %ecx,%ecx
        cpuid   # get necessary space for xsave
        movq    %rbx,%rcx
+       addq    \$63, %rbx
+       andq    \$-64, %rbx # align to next 64-byte multiple
        addq    \$0x48,%rbx # 0x18 for alignment, 0x30 for additional space
        subq    %rbx,%rsp
        movl    %ebx,0x24(%rsp)

Wonder if it might be clearer ;^> to orq \$63,%rbx; incq %rbx?

--
Take care. Thanks, Brian Inglis              Calgary, Alberta, Canada

La perfection est atteinte                   Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter  not when there is no more to add
mais lorsqu'il n'y a plus rien à retrancher  but when there is no more to cut
                                -- Antoine de Saint-Exupéry

--
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

Reply via email to