Conditional jump or move depends on uninitialised value(s) at 0x46AC989: NtGetContextThread (signal_x86_64.c:2002)
Conditional jump or move depends on uninitialised value(s) at 0x46ABA1E: xstate_to_server (unix_private.h:342) by 0x46ABA1E: context_to_server (signal_x86_64.c:1698)
Conditional jump or move depends on uninitialised value(s) at 0x46AC18F: NtSetContextThread (signal_x86_64.c:1859)
There's still some uninitialized bytes being passed to writev, but that seems to come from the pushfd instruction, and could probably be flagged as false positive.
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/ntdll/unix/signal_x86_64.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c index 2a030372fb7..d0f3ece266c 100644 --- a/dlls/ntdll/unix/signal_x86_64.c +++ b/dlls/ntdll/unix/signal_x86_64.c @@ -2642,6 +2642,7 @@ static void usr1_handler( int signal, siginfo_t *siginfo, void *ucontext ) DECLSPEC_ALIGN(64) XSTATE xs; context.c.ContextFlags = CONTEXT_FULL; context_init_xstate( &context.c, &xs ); + memset( &xs, 0, offsetof(XSTATE, YmmContext) );
NtGetContextThread( GetCurrentThread(), &context.c ); wait_suspend( &context.c );
Hi Rémi,
On 08.03.2021 09:14, Rémi Bernon wrote:
diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c index 2a030372fb7..d0f3ece266c 100644 --- a/dlls/ntdll/unix/signal_x86_64.c +++ b/dlls/ntdll/unix/signal_x86_64.c @@ -2642,6 +2642,7 @@ static void usr1_handler( int signal, siginfo_t *siginfo, void *ucontext ) DECLSPEC_ALIGN(64) XSTATE xs; context.c.ContextFlags = CONTEXT_FULL; context_init_xstate( &context.c, &xs );
memset( &xs, 0, offsetof(XSTATE, YmmContext) ); NtGetContextThread( GetCurrentThread(), &context.c ); wait_suspend( &context.c );
I think that the fix should go to NtGetContextThread. I have a patch for that, but it breaks our tests (and extended context tests seem generally fragile...). I need another look at that...
Thanks,
Jacek