From 70d81789275c4c5b8fed019937bed55d81ed2c7c Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Mon, 29 Jun 2020 18:56:48 -0500 Subject: [PATCH] Rebase against ec9e556d31278d2de28b8ba82a063dc9fffdb440. --- ...on-to-create-new-tokens-for-elevatio.patch | 14 +- .../0001-ntdll-Add-dummy-apiset-to-PEB.patch | 28 +-- patches/ntdll-ApiSetMap/definition | 1 + ...ase-Maintain-FLS-storage-list-in-PEB.patch | 38 +-- ...t-HashLinks-field-in-LDR-module-data.patch | 32 +-- patches/ntdll-Syscall_Emulation/definition | 2 + patches/ntdll-Threading/definition | 2 + patches/patchinstall.sh | 221 +++++------------- patches/winebuild-Fake_Dlls/definition | 10 + ...ub-implementation-of-Wow64Transition.patch | 16 +- staging/upstream-commit | 2 +- 11 files changed, 137 insertions(+), 229 deletions(-) diff --git a/patches/advapi32-Token_Integrity_Level/0006-ntdll-Add-function-to-create-new-tokens-for-elevatio.patch b/patches/advapi32-Token_Integrity_Level/0006-ntdll-Add-function-to-create-new-tokens-for-elevatio.patch index f0c849a5..542f2a79 100644 --- a/patches/advapi32-Token_Integrity_Level/0006-ntdll-Add-function-to-create-new-tokens-for-elevatio.patch +++ b/patches/advapi32-Token_Integrity_Level/0006-ntdll-Add-function-to-create-new-tokens-for-elevatio.patch @@ -1,4 +1,4 @@ -From d768c632777d80f52327ba0d525a0157b113f45a Mon Sep 17 00:00:00 2001 +From 478b58d0ff4d333f25b30a506d779fd2395b2b04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sat, 5 Aug 2017 01:45:29 +0200 Subject: [PATCH] ntdll: Add function to create new tokens for elevation @@ -14,7 +14,7 @@ Subject: [PATCH] ntdll: Add function to create new tokens for elevation 6 files changed, 117 insertions(+) diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec -index 0d19e12768f..e313d5807b3 100644 +index 9fc12485592..f3e765e25a1 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -1594,6 +1594,9 @@ @@ -28,11 +28,11 @@ index 0d19e12768f..e313d5807b3 100644 @ cdecl wine_get_version() NTDLL_wine_get_version @ cdecl wine_get_build_id() NTDLL_wine_get_build_id diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h -index b5b08fc47ef..8476907e7ec 100644 +index f36929c5acb..1afda71c3ad 100644 --- a/dlls/ntdll/ntdll_misc.h +++ b/dlls/ntdll/ntdll_misc.h -@@ -72,6 +72,9 @@ extern void init_locale( HMODULE module ) DECLSPEC_HIDDEN; - extern void init_user_process_params( SIZE_T data_size ) DECLSPEC_HIDDEN; +@@ -71,6 +71,9 @@ extern void init_locale( HMODULE module ) DECLSPEC_HIDDEN; + extern void init_user_process_params(void) DECLSPEC_HIDDEN; extern NTSTATUS restart_process( RTL_USER_PROCESS_PARAMETERS *params, NTSTATUS status ) DECLSPEC_HIDDEN; +/* token */ @@ -71,10 +71,10 @@ index b1cc307d2ae..2e5fee216ef 100644 * NtQueryInformationProcess [NTDLL.@] * ZwQueryInformationProcess [NTDLL.@] diff --git a/server/protocol.def b/server/protocol.def -index 6e0f309450a..7315f8ac4ea 100644 +index 62c93423104..4001b3cd095 100644 --- a/server/protocol.def +++ b/server/protocol.def -@@ -3755,6 +3755,14 @@ struct handle_info +@@ -3757,6 +3757,14 @@ struct handle_info @END diff --git a/patches/ntdll-ApiSetMap/0001-ntdll-Add-dummy-apiset-to-PEB.patch b/patches/ntdll-ApiSetMap/0001-ntdll-Add-dummy-apiset-to-PEB.patch index 3987c7cd..aa1d626e 100644 --- a/patches/ntdll-ApiSetMap/0001-ntdll-Add-dummy-apiset-to-PEB.patch +++ b/patches/ntdll-ApiSetMap/0001-ntdll-Add-dummy-apiset-to-PEB.patch @@ -1,38 +1,38 @@ -From 708e627172f61b5d0744135e31d4e9e3f7b32536 Mon Sep 17 00:00:00 2001 +From 803d1e468279ef5efc5f8f872e2fb9db2466cd75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Mon, 3 Apr 2017 01:06:26 +0200 Subject: [PATCH] ntdll: Add dummy apiset to PEB. --- - dlls/ntdll/thread.c | 2 ++ + dlls/ntdll/loader.c | 2 ++ include/Makefile.in | 1 + include/apiset.h | 37 +++++++++++++++++++++++++++++++++++++ include/winternl.h | 3 ++- 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 include/apiset.h -diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c -index 21e8b0c08f8..24254d4b43c 100644 ---- a/dlls/ntdll/thread.c -+++ b/dlls/ntdll/thread.c -@@ -71,6 +71,7 @@ static PEB_LDR_DATA ldr; +diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c +index bd19474e844..00a146278a5 100644 +--- a/dlls/ntdll/loader.c ++++ b/dlls/ntdll/loader.c +@@ -166,6 +166,7 @@ static PEB_LDR_DATA ldr = { sizeof(ldr), TRUE }; static RTL_BITMAP tls_bitmap; static RTL_BITMAP tls_expansion_bitmap; static RTL_BITMAP fls_bitmap; +static API_SET_NAMESPACE_ARRAY apiset_map; - static int nb_threads = 1; - struct ldt_copy *__wine_ldt_copy = NULL; -@@ -300,6 +301,7 @@ TEB *thread_init(void) + static CRITICAL_SECTION fls_section; + static CRITICAL_SECTION_DEBUG fls_critsect_debug = +@@ -4016,6 +4017,7 @@ void __wine_process_init(void) - peb = teb->Peb; + peb->LdrData = &ldr; peb->FastPebLock = &peb_lock; + peb->ApiSetMap = &apiset_map; peb->TlsBitmap = &tls_bitmap; peb->TlsExpansionBitmap = &tls_expansion_bitmap; peb->FlsBitmap = &fls_bitmap; diff --git a/include/Makefile.in b/include/Makefile.in -index 9796dd8e5d9..2bc410f4308 100644 +index 90fb873f203..015ad7c6942 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -15,6 +15,7 @@ SOURCES = \ @@ -87,7 +87,7 @@ index 00000000000..6801cd5f509 + +#endif diff --git a/include/winternl.h b/include/winternl.h -index f362790dbca..b33e346885f 100644 +index 9a70a2014f1..1d3ef1f5adb 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -23,6 +23,7 @@ @@ -108,5 +108,5 @@ index f362790dbca..b33e346885f 100644 PRTL_BITMAP TlsBitmap; /* 040/078 */ ULONG TlsBitmapBits[2]; /* 044/080 */ -- -2.26.2 +2.27.0 diff --git a/patches/ntdll-ApiSetMap/definition b/patches/ntdll-ApiSetMap/definition index 042ee383..617c1fef 100644 --- a/patches/ntdll-ApiSetMap/definition +++ b/patches/ntdll-ApiSetMap/definition @@ -1 +1,2 @@ Fixes: [44658] Add dummy apiset to PEB struct +Depends: ntdll-FLS_Callbacks diff --git a/patches/ntdll-FLS_Callbacks/0001-kernelbase-Maintain-FLS-storage-list-in-PEB.patch b/patches/ntdll-FLS_Callbacks/0001-kernelbase-Maintain-FLS-storage-list-in-PEB.patch index 4761fc87..1280bdde 100644 --- a/patches/ntdll-FLS_Callbacks/0001-kernelbase-Maintain-FLS-storage-list-in-PEB.patch +++ b/patches/ntdll-FLS_Callbacks/0001-kernelbase-Maintain-FLS-storage-list-in-PEB.patch @@ -1,4 +1,4 @@ -From 96a5e54b5f72d99a9c3d03ac4c5800fe324e44c0 Mon Sep 17 00:00:00 2001 +From 44e9e950fc95d382d7a1038743e54d897da94107 Mon Sep 17 00:00:00 2001 From: Paul Gofman Date: Thu, 23 Apr 2020 14:32:23 +0300 Subject: [PATCH] kernelbase: Maintain FLS storage list in PEB. @@ -92,7 +92,7 @@ index b91d279e327..924f19703bf 100644 test_threadpool(); } diff --git a/dlls/kernelbase/thread.c b/dlls/kernelbase/thread.c -index f44f2ff6538..3423fe8c727 100644 +index f20d460d07d..3c77b6a42f4 100644 --- a/dlls/kernelbase/thread.c +++ b/dlls/kernelbase/thread.c @@ -38,6 +38,10 @@ @@ -106,7 +106,7 @@ index f44f2ff6538..3423fe8c727 100644 /*********************************************************************** * Threads -@@ -928,6 +932,19 @@ static void init_fiber_context( struct fiber_data *fiber ) +@@ -915,6 +919,19 @@ static void init_fiber_context( struct fiber_data *fiber ) #endif } @@ -126,7 +126,7 @@ index f44f2ff6538..3423fe8c727 100644 /*********************************************************************** * CreateFiber (kernelbase.@) -@@ -1035,7 +1052,16 @@ void WINAPI DECLSPEC_HOTPATCH DeleteFiber( LPVOID fiber_ptr ) +@@ -1022,7 +1039,16 @@ void WINAPI DECLSPEC_HOTPATCH DeleteFiber( LPVOID fiber_ptr ) RtlExitUserThread( 1 ); } RtlFreeUserStack( fiber->stack_allocation ); @@ -144,7 +144,7 @@ index f44f2ff6538..3423fe8c727 100644 HeapFree( GetProcessHeap(), 0, fiber ); } -@@ -1057,6 +1083,19 @@ void WINAPI DECLSPEC_HOTPATCH SwitchToFiber( LPVOID fiber ) +@@ -1044,6 +1070,19 @@ void WINAPI DECLSPEC_HOTPATCH SwitchToFiber( LPVOID fiber ) struct fiber_data *new_fiber = fiber; struct fiber_data *current_fiber = NtCurrentTeb()->Tib.u.FiberData; @@ -164,7 +164,7 @@ index f44f2ff6538..3423fe8c727 100644 current_fiber->except = NtCurrentTeb()->Tib.ExceptionList; current_fiber->stack_limit = NtCurrentTeb()->Tib.StackLimit; current_fiber->fls_slots = NtCurrentTeb()->FlsSlots; -@@ -1082,9 +1121,7 @@ DWORD WINAPI DECLSPEC_HOTPATCH FlsAlloc( PFLS_CALLBACK_FUNCTION callback ) +@@ -1069,9 +1108,7 @@ DWORD WINAPI DECLSPEC_HOTPATCH FlsAlloc( PFLS_CALLBACK_FUNCTION callback ) PEB * const peb = NtCurrentTeb()->Peb; RtlAcquirePebLock(); @@ -175,7 +175,7 @@ index f44f2ff6538..3423fe8c727 100644 { SetLastError( ERROR_NOT_ENOUGH_MEMORY ); index = FLS_OUT_OF_INDEXES; -@@ -1094,9 +1131,7 @@ DWORD WINAPI DECLSPEC_HOTPATCH FlsAlloc( PFLS_CALLBACK_FUNCTION callback ) +@@ -1081,9 +1118,7 @@ DWORD WINAPI DECLSPEC_HOTPATCH FlsAlloc( PFLS_CALLBACK_FUNCTION callback ) index = RtlFindClearBitsAndSet( peb->FlsBitmap, 1, 1 ); if (index != ~0U) { @@ -186,7 +186,7 @@ index f44f2ff6538..3423fe8c727 100644 { RtlClearBits( peb->FlsBitmap, index, 1 ); index = FLS_OUT_OF_INDEXES; -@@ -1104,8 +1139,8 @@ DWORD WINAPI DECLSPEC_HOTPATCH FlsAlloc( PFLS_CALLBACK_FUNCTION callback ) +@@ -1091,8 +1126,8 @@ DWORD WINAPI DECLSPEC_HOTPATCH FlsAlloc( PFLS_CALLBACK_FUNCTION callback ) } else { @@ -197,7 +197,7 @@ index f44f2ff6538..3423fe8c727 100644 } } else SetLastError( ERROR_NO_MORE_ITEMS ); -@@ -1129,7 +1164,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH FlsFree( DWORD index ) +@@ -1116,7 +1151,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH FlsFree( DWORD index ) { /* FIXME: call Fls callback */ /* FIXME: add equivalent of ThreadZeroTlsCell here */ @@ -206,7 +206,7 @@ index f44f2ff6538..3423fe8c727 100644 } else SetLastError( ERROR_INVALID_PARAMETER ); RtlReleasePebLock(); -@@ -1148,7 +1183,7 @@ PVOID WINAPI DECLSPEC_HOTPATCH FlsGetValue( DWORD index ) +@@ -1135,7 +1170,7 @@ PVOID WINAPI DECLSPEC_HOTPATCH FlsGetValue( DWORD index ) return NULL; } SetLastError( ERROR_SUCCESS ); @@ -215,7 +215,7 @@ index f44f2ff6538..3423fe8c727 100644 } -@@ -1162,14 +1197,12 @@ BOOL WINAPI DECLSPEC_HOTPATCH FlsSetValue( DWORD index, PVOID data ) +@@ -1149,14 +1184,12 @@ BOOL WINAPI DECLSPEC_HOTPATCH FlsSetValue( DWORD index, PVOID data ) SetLastError( ERROR_INVALID_PARAMETER ); return FALSE; } @@ -233,12 +233,12 @@ index f44f2ff6538..3423fe8c727 100644 } diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c -index b884b43b154..c0a18669590 100644 +index efacc0c081e..e61c6e5abc7 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c -@@ -153,6 +153,15 @@ static CRITICAL_SECTION_DEBUG dlldir_critsect_debug = - }; - static CRITICAL_SECTION dlldir_section = { &dlldir_critsect_debug, -1, 0, 0, 0, 0 }; +@@ -167,6 +167,15 @@ static RTL_BITMAP tls_bitmap; + static RTL_BITMAP tls_expansion_bitmap; + static RTL_BITMAP fls_bitmap; +static CRITICAL_SECTION fls_section; +static CRITICAL_SECTION_DEBUG fls_critsect_debug = @@ -252,7 +252,7 @@ index b884b43b154..c0a18669590 100644 static WINE_MODREF *cached_modref; static WINE_MODREF *current_modref; static WINE_MODREF *last_failed_modref; -@@ -193,6 +202,16 @@ static RTL_UNLOAD_EVENT_TRACE unload_traces[RTL_UNLOAD_EVENT_TRACE_NUMBER]; +@@ -207,6 +216,16 @@ static RTL_UNLOAD_EVENT_TRACE unload_traces[RTL_UNLOAD_EVENT_TRACE_NUMBER]; static RTL_UNLOAD_EVENT_TRACE *unload_trace_ptr; static unsigned int unload_trace_seq; @@ -269,7 +269,7 @@ index b884b43b154..c0a18669590 100644 static void module_push_unload_trace( const LDR_DATA_TABLE_ENTRY *ldr ) { RTL_UNLOAD_EVENT_TRACE *ptr = &unload_traces[unload_trace_seq]; -@@ -3187,6 +3206,13 @@ void WINAPI LdrShutdownThread(void) +@@ -3201,6 +3220,13 @@ void WINAPI LdrShutdownThread(void) /* don't do any detach calls if process is exiting */ if (process_detaching) return; @@ -283,7 +283,7 @@ index b884b43b154..c0a18669590 100644 RtlEnterCriticalSection( &loader_section ); wm = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress ); -@@ -3400,6 +3426,7 @@ PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE hModule) +@@ -3414,6 +3440,7 @@ PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE hModule) */ void WINAPI LdrInitializeThunk( CONTEXT *context, void **entry, ULONG_PTR unknown3, ULONG_PTR unknown4 ) { @@ -291,7 +291,7 @@ index b884b43b154..c0a18669590 100644 static int attach_done; int i; NTSTATUS status; -@@ -3435,6 +3462,25 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, void **entry, ULONG_PTR unknow +@@ -3449,6 +3476,25 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, void **entry, ULONG_PTR unknow InsertHeadList( &tls_links, &NtCurrentTeb()->TlsLinks ); RtlReleasePebLock(); diff --git a/patches/ntdll-HashLinks/0001-ntdll-Implement-HashLinks-field-in-LDR-module-data.patch b/patches/ntdll-HashLinks/0001-ntdll-Implement-HashLinks-field-in-LDR-module-data.patch index 98e7d7ca..b8a981a6 100644 --- a/patches/ntdll-HashLinks/0001-ntdll-Implement-HashLinks-field-in-LDR-module-data.patch +++ b/patches/ntdll-HashLinks/0001-ntdll-Implement-HashLinks-field-in-LDR-module-data.patch @@ -1,4 +1,4 @@ -From 250b8699aa64096bb4b38d454c03b57afe91a619 Mon Sep 17 00:00:00 2001 +From 54796a7cba6fd2017c4826874ccd09a9662aff00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Mon, 3 Apr 2017 05:30:27 +0200 Subject: [PATCH] ntdll: Implement HashLinks field in LDR module data. @@ -115,7 +115,7 @@ index 59965984a67..95f18fb71e3 100644 test_Loader(); } diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c -index 42cdc628021..df8e0c69185 100644 +index efacc0c081e..b0b5c93b41b 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -121,6 +121,9 @@ struct file_id @@ -128,7 +128,7 @@ index 42cdc628021..df8e0c69185 100644 /* internal representation of loaded modules */ typedef struct _wine_modref { -@@ -446,6 +449,52 @@ static void call_ldr_notifications( ULONG reason, LDR_DATA_TABLE_ENTRY *module ) +@@ -460,6 +463,52 @@ static void call_ldr_notifications( ULONG reason, LDR_DATA_TABLE_ENTRY *module ) } } @@ -181,7 +181,7 @@ index 42cdc628021..df8e0c69185 100644 /************************************************************************* * get_modref * -@@ -1188,7 +1237,12 @@ static WINE_MODREF *alloc_module( HMODULE hModule, const UNICODE_STRING *nt_name +@@ -1202,7 +1251,12 @@ static WINE_MODREF *alloc_module( HMODULE hModule, const UNICODE_STRING *nt_name &wm->ldr.InLoadOrderLinks); InsertTailList(&NtCurrentTeb()->Peb->LdrData->InMemoryOrderModuleList, &wm->ldr.InMemoryOrderLinks); @@ -194,7 +194,7 @@ index 42cdc628021..df8e0c69185 100644 if (!(nt->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_NX_COMPAT)) { -@@ -1894,6 +1948,7 @@ static NTSTATUS build_module( LPCWSTR load_path, const UNICODE_STRING *nt_name, +@@ -1908,6 +1962,7 @@ static NTSTATUS build_module( LPCWSTR load_path, const UNICODE_STRING *nt_name, /* the module has only be inserted in the load & memory order lists */ RemoveEntryList(&wm->ldr.InLoadOrderLinks); RemoveEntryList(&wm->ldr.InMemoryOrderLinks); @@ -202,7 +202,7 @@ index 42cdc628021..df8e0c69185 100644 /* FIXME: there are several more dangling references * left. Including dlls loaded by this dll before the -@@ -3226,6 +3281,7 @@ static void free_modref( WINE_MODREF *wm ) +@@ -3244,6 +3299,7 @@ static void free_modref( WINE_MODREF *wm ) { RemoveEntryList(&wm->ldr.InLoadOrderLinks); RemoveEntryList(&wm->ldr.InMemoryOrderLinks); @@ -210,15 +210,15 @@ index 42cdc628021..df8e0c69185 100644 if (wm->ldr.InInitializationOrderLinks.Flink) RemoveEntryList(&wm->ldr.InInitializationOrderLinks); -@@ -3945,6 +4001,7 @@ void __wine_process_init(void) - SIZE_T info_size; - TEB *teb; - PEB *peb; +@@ -3937,6 +3993,7 @@ void __wine_process_init(void) + ULONG_PTR val; + TEB *teb = NtCurrentTeb(); + PEB *peb = teb->Peb; + DWORD i; - if (!unix_funcs) load_ntdll_so( ntdll_module, &__wine_spec_nt_header ); - -@@ -3961,6 +4018,10 @@ void __wine_process_init(void) + peb->LdrData = &ldr; + peb->FastPebLock = &peb_lock; +@@ -3974,6 +4031,10 @@ void __wine_process_init(void) load_global_options(); version_init(); @@ -229,7 +229,7 @@ index 42cdc628021..df8e0c69185 100644 /* setup the load callback and create ntdll modref */ RtlInitUnicodeString( &nt_name, ntdllW ); status = build_so_dll_module( params->DllPath.Buffer, &nt_name, ntdll_module, 0, &wm ); -@@ -4034,6 +4095,9 @@ void __wine_process_init(void) +@@ -4047,6 +4108,9 @@ void __wine_process_init(void) teb->Tib.StackLimit = stack.StackLimit; teb->DeallocationStack = stack.DeallocationStack; @@ -240,10 +240,10 @@ index 42cdc628021..df8e0c69185 100644 } diff --git a/include/winternl.h b/include/winternl.h -index 3ff15f28c15..59e9eddd26d 100644 +index 9a70a2014f1..424481b1a6d 100644 --- a/include/winternl.h +++ b/include/winternl.h -@@ -2369,8 +2369,8 @@ typedef struct _LDR_DATA_TABLE_ENTRY +@@ -2370,8 +2370,8 @@ typedef struct _LDR_DATA_TABLE_ENTRY ULONG Flags; SHORT LoadCount; SHORT TlsIndex; diff --git a/patches/ntdll-Syscall_Emulation/definition b/patches/ntdll-Syscall_Emulation/definition index 035c18c1..c914e59b 100644 --- a/patches/ntdll-Syscall_Emulation/definition +++ b/patches/ntdll-Syscall_Emulation/definition @@ -1,2 +1,4 @@ Fixes: [48291] Detroit: Become Human crashes on launch Depends: winebuild-Fake_Dlls +# Re-enable me when winebuild-Fake_Dlls gets re-enabled! +Disabled: true diff --git a/patches/ntdll-Threading/definition b/patches/ntdll-Threading/definition index d0e88f9b..7e597913 100644 --- a/patches/ntdll-Threading/definition +++ b/patches/ntdll-Threading/definition @@ -1 +1,3 @@ Fixes: Fix race-condition when threads are killed during shutdown +# Needs careful review to determine if this is still needed. Deferring. +Disabled: true diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 99376f3d..1017d098 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -52,7 +52,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "13b2587d4f55d64a1381c60ac34acf4abe6bb1e8" + echo "ec9e556d31278d2de28b8ba82a063dc9fffdb440" } # Show version information @@ -189,13 +189,11 @@ patch_enable_all () enable_ntdll_RtlQueryRegistryValuesEx="$1" enable_ntdll_Serial_Port_Detection="$1" enable_ntdll_Status_Mapping="$1" - enable_ntdll_Syscall_Emulation="$1" enable_ntdll_SystemCodeIntegrityInformation="$1" enable_ntdll_SystemExtendedProcessInformation="$1" enable_ntdll_SystemInterruptInformation="$1" enable_ntdll_SystemModuleInformation="$1" enable_ntdll_SystemRoot_Symlink="$1" - enable_ntdll_Threading="$1" enable_ntdll_WRITECOPY="$1" enable_ntdll_Zero_mod_name="$1" enable_ntdll_aarch_TEB="$1" @@ -280,7 +278,6 @@ patch_enable_all () enable_wineboot_HKEY_DYN_DATA="$1" enable_wineboot_ProxySettings="$1" enable_wineboot_drivers_etc_Stubs="$1" - enable_winebuild_Fake_Dlls="$1" enable_winecfg_Libraries="$1" enable_winecfg_Staging="$1" enable_wined3d_Accounting="$1" @@ -654,9 +651,6 @@ patch_enable () ntdll-Status_Mapping) enable_ntdll_Status_Mapping="$2" ;; - ntdll-Syscall_Emulation) - enable_ntdll_Syscall_Emulation="$2" - ;; ntdll-SystemCodeIntegrityInformation) enable_ntdll_SystemCodeIntegrityInformation="$2" ;; @@ -672,9 +666,6 @@ patch_enable () ntdll-SystemRoot_Symlink) enable_ntdll_SystemRoot_Symlink="$2" ;; - ntdll-Threading) - enable_ntdll_Threading="$2" - ;; ntdll-WRITECOPY) enable_ntdll_WRITECOPY="$2" ;; @@ -927,9 +918,6 @@ patch_enable () wineboot-drivers_etc_Stubs) enable_wineboot_drivers_etc_Stubs="$2" ;; - winebuild-Fake_Dlls) - enable_winebuild_Fake_Dlls="$2" - ;; winecfg-Libraries) enable_winecfg_Libraries="$2" ;; @@ -1584,28 +1572,6 @@ if test "$enable_ntdll_SystemCodeIntegrityInformation" -eq 1; then enable_ntdll_SystemExtendedProcessInformation=1 fi -if test "$enable_ntdll_Syscall_Emulation" -eq 1; then - if test "$enable_winebuild_Fake_Dlls" -gt 1; then - abort "Patchset winebuild-Fake_Dlls disabled, but ntdll-Syscall_Emulation depends on that." - fi - enable_winebuild_Fake_Dlls=1 -fi - -if test "$enable_winebuild_Fake_Dlls" -eq 1; then - if test "$enable_ntdll_ApiSetMap" -gt 1; then - abort "Patchset ntdll-ApiSetMap disabled, but winebuild-Fake_Dlls depends on that." - fi - if test "$enable_ntdll_WRITECOPY" -gt 1; then - abort "Patchset ntdll-WRITECOPY disabled, but winebuild-Fake_Dlls depends on that." - fi - if test "$enable_ws2_32_WSACleanup" -gt 1; then - abort "Patchset ws2_32-WSACleanup disabled, but winebuild-Fake_Dlls depends on that." - fi - enable_ntdll_ApiSetMap=1 - enable_ntdll_WRITECOPY=1 - enable_ws2_32_WSACleanup=1 -fi - if test "$enable_ntdll_NtDevicePath" -eq 1; then if test "$enable_ntdll_Pipe_SpecialCharacters" -gt 1; then abort "Patchset ntdll-Pipe_SpecialCharacters disabled, but ntdll-NtDevicePath depends on that." @@ -1627,6 +1593,13 @@ if test "$enable_ntdll_Builtin_Prot" -eq 1; then enable_ntdll_WRITECOPY=1 fi +if test "$enable_ntdll_ApiSetMap" -eq 1; then + if test "$enable_ntdll_FLS_Callbacks" -gt 1; then + abort "Patchset ntdll-FLS_Callbacks disabled, but ntdll-ApiSetMap depends on that." + fi + enable_ntdll_FLS_Callbacks=1 +fi + if test "$enable_kernel32_Processor_Group" -eq 1; then if test "$enable_api_ms_win_Stub_DLLs" -gt 1; then abort "Patchset api-ms-win-Stub_DLLs disabled, but kernel32-Processor_Group depends on that." @@ -3331,13 +3304,42 @@ if test "$enable_ntdll_Activation_Context" -eq 1; then ) >> "$patchlist" fi +# Patchset ntdll-FLS_Callbacks +# | +# | This patchset fixes the following Wine bugs: +# | * [#49012] Application build with .NET CoreRT crashes due to FLS callbacks not being called +# | +# | Modified files: +# | * dlls/kernel32/tests/fiber.c, dlls/kernel32/tests/loader.c, dlls/kernel32/tests/thread.c, dlls/kernelbase/thread.c, +# | dlls/ntdll/loader.c +# | +if test "$enable_ntdll_FLS_Callbacks" -eq 1; then + patch_apply ntdll-FLS_Callbacks/0001-kernelbase-Maintain-FLS-storage-list-in-PEB.patch + patch_apply ntdll-FLS_Callbacks/0002-kernelbase-Don-t-use-PEB-lock-for-FLS-data.patch + patch_apply ntdll-FLS_Callbacks/0003-kernelbase-Zero-all-FLS-slots-instances-in-FlsFree.patch + patch_apply ntdll-FLS_Callbacks/0004-ntdll-Call-FLS-callbacks-on-thread-shutdown.patch + patch_apply ntdll-FLS_Callbacks/0005-kernelbase-Call-FLS-callbacks-from-FlsFree.patch + patch_apply ntdll-FLS_Callbacks/0006-kernelbase-Call-FLS-callbacks-from-DeleteFiber.patch + ( + printf '%s\n' '+ { "Paul Gofman", "kernelbase: Maintain FLS storage list in PEB.", 1 },'; + printf '%s\n' '+ { "Paul Gofman", "kernelbase: Don'\''t use PEB lock for FLS data.", 1 },'; + printf '%s\n' '+ { "Paul Gofman", "kernelbase: Zero all FLS slots instances in FlsFree().", 1 },'; + printf '%s\n' '+ { "Paul Gofman", "ntdll: Call FLS callbacks on thread shutdown.", 1 },'; + printf '%s\n' '+ { "Paul Gofman", "kernelbase: Call FLS callbacks from FlsFree().", 1 },'; + printf '%s\n' '+ { "Paul Gofman", "kernelbase: Call FLS callbacks from DeleteFiber().", 1 },'; + ) >> "$patchlist" +fi + # Patchset ntdll-ApiSetMap # | +# | This patchset has the following (direct or indirect) dependencies: +# | * ntdll-FLS_Callbacks +# | # | This patchset fixes the following Wine bugs: # | * [#44658] Add dummy apiset to PEB struct # | # | Modified files: -# | * dlls/ntdll/thread.c, include/Makefile.in, include/apiset.h, include/winternl.h +# | * dlls/ntdll/loader.c, include/Makefile.in, include/apiset.h, include/winternl.h # | if test "$enable_ntdll_ApiSetMap" -eq 1; then patch_apply ntdll-ApiSetMap/0001-ntdll-Add-dummy-apiset-to-PEB.patch @@ -3486,32 +3488,6 @@ if test "$enable_ntdll_Exception" -eq 1; then ) >> "$patchlist" fi -# Patchset ntdll-FLS_Callbacks -# | -# | This patchset fixes the following Wine bugs: -# | * [#49012] Application build with .NET CoreRT crashes due to FLS callbacks not being called -# | -# | Modified files: -# | * dlls/kernel32/tests/fiber.c, dlls/kernel32/tests/loader.c, dlls/kernel32/tests/thread.c, dlls/kernelbase/thread.c, -# | dlls/ntdll/loader.c -# | -if test "$enable_ntdll_FLS_Callbacks" -eq 1; then - patch_apply ntdll-FLS_Callbacks/0001-kernelbase-Maintain-FLS-storage-list-in-PEB.patch - patch_apply ntdll-FLS_Callbacks/0002-kernelbase-Don-t-use-PEB-lock-for-FLS-data.patch - patch_apply ntdll-FLS_Callbacks/0003-kernelbase-Zero-all-FLS-slots-instances-in-FlsFree.patch - patch_apply ntdll-FLS_Callbacks/0004-ntdll-Call-FLS-callbacks-on-thread-shutdown.patch - patch_apply ntdll-FLS_Callbacks/0005-kernelbase-Call-FLS-callbacks-from-FlsFree.patch - patch_apply ntdll-FLS_Callbacks/0006-kernelbase-Call-FLS-callbacks-from-DeleteFiber.patch - ( - printf '%s\n' '+ { "Paul Gofman", "kernelbase: Maintain FLS storage list in PEB.", 1 },'; - printf '%s\n' '+ { "Paul Gofman", "kernelbase: Don'\''t use PEB lock for FLS data.", 1 },'; - printf '%s\n' '+ { "Paul Gofman", "kernelbase: Zero all FLS slots instances in FlsFree().", 1 },'; - printf '%s\n' '+ { "Paul Gofman", "ntdll: Call FLS callbacks on thread shutdown.", 1 },'; - printf '%s\n' '+ { "Paul Gofman", "kernelbase: Call FLS callbacks from FlsFree().", 1 },'; - printf '%s\n' '+ { "Paul Gofman", "kernelbase: Call FLS callbacks from DeleteFiber().", 1 },'; - ) >> "$patchlist" -fi - # Patchset ntdll-FileFsFullSizeInformation # | # | Modified files: @@ -3822,96 +3798,6 @@ if test "$enable_ntdll_Status_Mapping" -eq 1; then ) >> "$patchlist" fi -# Patchset ws2_32-WSACleanup -# | -# | This patchset fixes the following Wine bugs: -# | * [#18670] Properly close sockets when WSACleanup is called -# | -# | Modified files: -# | * dlls/ntdll/ntdll.spec, dlls/ntdll/server.c, dlls/ntdll/unix/loader.c, dlls/ntdll/unix/server.c, -# | dlls/ntdll/unix/unix_private.h, dlls/ntdll/unixlib.h, dlls/ws2_32/socket.c, dlls/ws2_32/tests/sock.c, -# | include/wine/server.h, server/protocol.def, server/sock.c -# | -if test "$enable_ws2_32_WSACleanup" -eq 1; then - patch_apply ws2_32-WSACleanup/0001-ws2_32-Proper-WSACleanup-implementation-using-winese.patch - patch_apply ws2_32-WSACleanup/0002-ws2_32-Invalidate-client-side-file-descriptor-cache-.patch - ( - printf '%s\n' '+ { "Matt Durgavich", "ws2_32: Proper WSACleanup implementation using wineserver function.", 2 },'; - printf '%s\n' '+ { "Sebastian Lackner", "ws2_32: Invalidate client-side file descriptor cache in WSACleanup.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset winebuild-Fake_Dlls -# | -# | This patchset has the following (direct or indirect) dependencies: -# | * ntdll-ApiSetMap, ntdll-WRITECOPY, ws2_32-WSACleanup -# | -# | This patchset fixes the following Wine bugs: -# | * [#21232] Chromium-based browser engines (Chrome, Opera, Comodo Dragon, SRWare Iron) crash on startup unless '--no- -# | sandbox' is used (native API sandboxing/hooking scheme incompatible with Wine) -# | * [#42741] StarCraft I: 1.18 PTR fails to initialize ClientSdk.dll -# | * [#45349] Multiple applications and games crash due to missing support for 64-bit syscall thunks (StreetFighter V) -# | * [#45573] League of Legends 8.12+ fails to start a game (anticheat engine, hooking of syscall return instructions) -# | * [#45650] chromium 32-bit sandbox expects different syscall thunks depending on Windows version -# | -# | Modified files: -# | * dlls/dbghelp/cpu_i386.c, dlls/kernel32/tests/loader.c, dlls/krnl386.exe16/kernel.c, -# | dlls/krnl386.exe16/kernel16_private.h, dlls/krnl386.exe16/ne_module.c, dlls/krnl386.exe16/ne_segment.c, -# | dlls/krnl386.exe16/task.c, dlls/krnl386.exe16/thunk.c, dlls/krnl386.exe16/wowthunk.c, dlls/ntdll/actctx.c, -# | dlls/ntdll/loader.c, dlls/ntdll/locale.c, dlls/ntdll/ntdll_misc.h, dlls/ntdll/path.c, dlls/ntdll/signal_i386.c, -# | dlls/ntdll/tests/exception.c, dlls/ntdll/thread.c, dlls/ntdll/unix/signal_i386.c, dlls/ntdll/unix/thread.c, -# | dlls/ntdll/unix/unix_private.h, dlls/ntdll/unix/virtual.c, dlls/ntdll/unixlib.h, dlls/system.drv16/system.c, -# | dlls/toolhelp.dll16/toolhelp.c, dlls/user.exe16/message.c, dlls/user.exe16/user.c, dlls/user.exe16/window.c, -# | include/winternl.h, libs/wine/loader.c, server/mapping.c, tools/winebuild/build.h, tools/winebuild/import.c, -# | tools/winebuild/parser.c, tools/winebuild/relay.c, tools/winebuild/res32.c, tools/winebuild/spec16.c, -# | tools/winebuild/spec32.c, tools/winebuild/utils.c -# | -if test "$enable_winebuild_Fake_Dlls" -eq 1; then - patch_apply winebuild-Fake_Dlls/0001-kernel32-tests-Add-basic-tests-for-fake-dlls.patch - patch_apply winebuild-Fake_Dlls/0002-krnl386.exe16-Do-not-abuse-WOW32Reserved-field-for-1.patch - patch_apply winebuild-Fake_Dlls/0003-winebuild-Generate-syscall-thunks-for-ntdll-exports.patch - patch_apply winebuild-Fake_Dlls/0004-winebuild-Use-multipass-label-system-to-generate-fak.patch - patch_apply winebuild-Fake_Dlls/0005-winebuild-Add-stub-functions-in-fake-dlls.patch - patch_apply winebuild-Fake_Dlls/0006-winebuild-Add-syscall-thunks-in-fake-dlls.patch - patch_apply winebuild-Fake_Dlls/0007-winebuild-Fix-size-of-relocation-information-in-fake.patch - patch_apply winebuild-Fake_Dlls/0008-winebuild-Try-to-make-sure-RVA-matches-between-fake-.patch - patch_apply winebuild-Fake_Dlls/0009-libs-wine-Use-same-file-alignment-for-fake-and-built.patch - patch_apply winebuild-Fake_Dlls/0010-tools-winebuild-Add-syscall-thunks-for-64-bit.patch - patch_apply winebuild-Fake_Dlls/0011-ntdll-Call-NtOpenFile-through-syscall-thunk.patch - ( - printf '%s\n' '+ { "Michael Müller", "kernel32/tests: Add basic tests for fake dlls.", 1 },'; - printf '%s\n' '+ { "Sebastian Lackner", "krnl386.exe16: Do not abuse WOW32Reserved field for 16-bit stack address.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "winebuild: Generate syscall thunks for ntdll exports.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "winebuild: Use multipass label system to generate fake dlls.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "winebuild: Add stub functions in fake dlls.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "winebuild: Add syscall thunks in fake dlls.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "winebuild: Fix size of relocation information in fake dlls.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "winebuild: Try to make sure RVA matches between fake and builtin DLLs.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "libs/wine: Use same file alignment for fake and builtin DLLs.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "tools/winebuild: Add syscall thunks for 64 bit.", 1 },'; - printf '%s\n' '+ { "Paul Gofman", "ntdll: Call NtOpenFile through syscall thunk.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset ntdll-Syscall_Emulation -# | -# | This patchset has the following (direct or indirect) dependencies: -# | * ntdll-ApiSetMap, ntdll-WRITECOPY, ws2_32-WSACleanup, winebuild-Fake_Dlls -# | -# | This patchset fixes the following Wine bugs: -# | * [#48291] Detroit: Become Human crashes on launch -# | -# | Modified files: -# | * configure.ac, dlls/ntdll/thread.c, dlls/ntdll/unix/signal_x86_64.c, dlls/ntdll/unix/thread.c, -# | dlls/ntdll/unix/unix_private.h, dlls/ntdll/unixlib.h, tools/winebuild/spec32.c -# | -if test "$enable_ntdll_Syscall_Emulation" -eq 1; then - patch_apply ntdll-Syscall_Emulation/0001-ntdll-Support-x86_64-syscall-emulation.patch - ( - printf '%s\n' '+ { "Paul Gofman", "ntdll: Support x86_64 syscall emulation.", 1 },'; - ) >> "$patchlist" -fi - # Patchset ntdll-SystemExtendedProcessInformation # | # | This patchset fixes the following Wine bugs: @@ -3995,18 +3881,6 @@ if test "$enable_ntdll_SystemRoot_Symlink" -eq 1; then ) >> "$patchlist" fi -# Patchset ntdll-Threading -# | -# | Modified files: -# | * dlls/ntdll/thread.c, dlls/ntdll/unix/thread.c -# | -if test "$enable_ntdll_Threading" -eq 1; then - patch_apply ntdll-Threading/0001-ntdll-Fix-race-condition-when-threads-are-killed-dur.patch - ( - printf '%s\n' '+ { "Sebastian Lackner", "ntdll: Fix race-condition when threads are killed during shutdown.", 1 },'; - ) >> "$patchlist" -fi - # Patchset ntdll-Zero_mod_name # | # | Modified files: @@ -4333,6 +4207,25 @@ if test "$enable_riched20_IText_Interface" -eq 1; then ) >> "$patchlist" fi +# Patchset ws2_32-WSACleanup +# | +# | This patchset fixes the following Wine bugs: +# | * [#18670] Properly close sockets when WSACleanup is called +# | +# | Modified files: +# | * dlls/ntdll/ntdll.spec, dlls/ntdll/server.c, dlls/ntdll/unix/loader.c, dlls/ntdll/unix/server.c, +# | dlls/ntdll/unix/unix_private.h, dlls/ntdll/unixlib.h, dlls/ws2_32/socket.c, dlls/ws2_32/tests/sock.c, +# | include/wine/server.h, server/protocol.def, server/sock.c +# | +if test "$enable_ws2_32_WSACleanup" -eq 1; then + patch_apply ws2_32-WSACleanup/0001-ws2_32-Proper-WSACleanup-implementation-using-winese.patch + patch_apply ws2_32-WSACleanup/0002-ws2_32-Invalidate-client-side-file-descriptor-cache-.patch + ( + printf '%s\n' '+ { "Matt Durgavich", "ws2_32: Proper WSACleanup implementation using wineserver function.", 2 },'; + printf '%s\n' '+ { "Sebastian Lackner", "ws2_32: Invalidate client-side file descriptor cache in WSACleanup.", 1 },'; + ) >> "$patchlist" +fi + # Patchset server-Desktop_Refcount # | # | This patchset has the following (direct or indirect) dependencies: diff --git a/patches/winebuild-Fake_Dlls/definition b/patches/winebuild-Fake_Dlls/definition index 2f30fce6..bf245433 100644 --- a/patches/winebuild-Fake_Dlls/definition +++ b/patches/winebuild-Fake_Dlls/definition @@ -6,3 +6,13 @@ Fixes: [45650] chromium 32-bit sandbox expects different syscall thunks dependin Depends: ntdll-WRITECOPY Depends: ws2_32-WSACleanup Depends: ntdll-ApiSetMap + +# As of 43be3507c04, unless I've misread, ntdll.dll no longer has the chance to +# run code before ntdll.so performs process initialization. Unfortunately, +# ntdll.so is still making calls to Nt* exports during that process +# initialization, which in practice means it's calling syscall thunks. In order +# for this series to work, we need to poke __wine_syscall_dispatcher into the +# TEB before those calls are made. Fixing this would require a nontrivial amount +# of effort, which will be obviated as soon as Alexandre finishes splitting +# ntdll upstream. +Disabled: true diff --git a/patches/wow64cpu-Wow64Transition/0002-ntdll-Add-a-stub-implementation-of-Wow64Transition.patch b/patches/wow64cpu-Wow64Transition/0002-ntdll-Add-a-stub-implementation-of-Wow64Transition.patch index f5c5c6c5..8bb5f9a9 100644 --- a/patches/wow64cpu-Wow64Transition/0002-ntdll-Add-a-stub-implementation-of-Wow64Transition.patch +++ b/patches/wow64cpu-Wow64Transition/0002-ntdll-Add-a-stub-implementation-of-Wow64Transition.patch @@ -1,4 +1,4 @@ -From 384a965d9dd8ad2d946682e45c409795bba292a2 Mon Sep 17 00:00:00 2001 +From 5dc9d48bb56202065ebbf2888834f138505bb6a7 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Wed, 8 Aug 2018 20:00:15 -0500 Subject: [PATCH] ntdll: Add a stub implementation of Wow64Transition. @@ -9,10 +9,10 @@ Subject: [PATCH] ntdll: Add a stub implementation of Wow64Transition. 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c -index 42b681e4cd3..c8cdf4f5436 100644 +index c471755139f..57f1805bf18 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c -@@ -4324,6 +4324,7 @@ NTSTATUS WINAPI NtLoadDriver( const UNICODE_STRING *DriverServiceName ) +@@ -3918,6 +3918,7 @@ NTSTATUS WINAPI NtLoadDriver( const UNICODE_STRING *DriverServiceName ) return STATUS_NOT_IMPLEMENTED; } @@ -20,7 +20,7 @@ index 42b681e4cd3..c8cdf4f5436 100644 /*********************************************************************** * NtUnloadDriver (NTDLL.@) -@@ -4382,13 +4383,16 @@ void __wine_process_init(void) +@@ -3949,13 +3950,16 @@ void __wine_process_init(void) static const WCHAR ntdllW[] = {'\\','?','?','\\','C',':','\\','w','i','n','d','o','w','s','\\', 's','y','s','t','e','m','3','2','\\', 'n','t','d','l','l','.','d','l','l',0}; @@ -38,9 +38,9 @@ index 42b681e4cd3..c8cdf4f5436 100644 NTSTATUS status; ANSI_STRING func_name; UNICODE_STRING nt_name; -@@ -4431,6 +4435,13 @@ void __wine_process_init(void) +@@ -4012,6 +4016,13 @@ void __wine_process_init(void) MESSAGE( "wine: could not load kernel32.dll, status %x\n", status ); - exit(1); + NtTerminateProcess( GetCurrentProcess(), status ); } + + RtlInitUnicodeString( &nt_name, wow64cpuW ); @@ -53,7 +53,7 @@ index 42b681e4cd3..c8cdf4f5436 100644 if ((status = LdrGetProcedureAddress( wm->ldr.DllBase, &func_name, 0, (void **)&kernel32_start_process )) != STATUS_SUCCESS) diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec -index e313d5807b3..b20ded3d108 100644 +index f3e765e25a1..4d448dc8f37 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -1112,6 +1112,7 @@ @@ -65,5 +65,5 @@ index e313d5807b3..b20ded3d108 100644 @ stdcall -private ZwAccessCheck(ptr long long ptr ptr ptr ptr ptr) NtAccessCheck @ stdcall -private ZwAccessCheckAndAuditAlarm(ptr long ptr ptr ptr long ptr long ptr ptr ptr) NtAccessCheckAndAuditAlarm -- -2.26.2 +2.27.0 diff --git a/staging/upstream-commit b/staging/upstream-commit index 07ebcfce..4ff0f6d7 100644 --- a/staging/upstream-commit +++ b/staging/upstream-commit @@ -1 +1 @@ -13b2587d4f55d64a1381c60ac34acf4abe6bb1e8 +ec9e556d31278d2de28b8ba82a063dc9fffdb440