[PATCH 2/2] ntdll: Clear the first two stack pages in signal_start_thread.
Alexandre Julliard
julliard at winehq.org
Tue Mar 30 13:33:39 CDT 2021
Rémi Bernon <rbernon at codeweavers.com> writes:
>> @@ -1540,10 +1540,8 @@ __ASM_GLOBAL_FUNC( signal_start_thread,
>> "movq %rcx,%rbx\n\t" /* context */
>> /* clear the thread stack */
>> "andq $~0xfff,%rcx\n\t" /* round down to page size */
>> - "movq %gs:0x30,%rax\n\t"
>> - "movq 0x10(%rax),%rdi\n\t" /* NtCurrentTeb()->Tib.StackLimit */
>> - "addq $0x2000,%rdi\n\t"
>> - "movq %rdi,%rsp\n\t"
>> + "movq %rcx,%rdi\n\t"
>> + "subq $0x2000,%rdi\n\t"
>> "subq %rdi,%rcx\n\t"
>> "xorl %eax,%eax\n\t"
>> "shrq $3,%rcx\n\t"
>
> Also out of curiosity, what was the reason not to clear the last (last
> two on x86_64) stack page(s) here?
There's already data there, like the initial context.
> I also removed the rsp stores, assuming it wasn't used for rep movs
> anyway but I'm now thinking that maybe all this was here for the case
> we get signaled while clearing the pages?
Yes, in general touching the stack below the stack pointer is not a good
idea.
--
Alexandre Julliard
julliard at winehq.org
More information about the wine-devel
mailing list