mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 18:37:17 +00:00
ntdll: Restrict cases for std handle inheritance in CreateProcess().
Only allow std handle inheritance when: - either bInherit flag of CreateProcess is TRUE, - or child process is in CUI subsystem and STARTF_USESTDHANDLES is no used. Signed-off-by: Eric Pouech <epouech@codeweavers.com>
This commit is contained in:
parent
000f7faaa2
commit
bf97f9490a
|
@ -5014,10 +5014,10 @@ static void test_CreateProcessCUI(void)
|
|||
{FALSE, DETACHED_PROCESS | CREATE_NO_WINDOW, NULL_STD, 0},
|
||||
/* 5*/ {FALSE, CREATE_NEW_CONSOLE | CREATE_NO_WINDOW, NULL_STD, 0},
|
||||
|
||||
{FALSE, 0, CONSOLE_STD, 0, TRUE},
|
||||
{FALSE, 0, CONSOLE_STD, 0},
|
||||
{FALSE, DETACHED_PROCESS, CONSOLE_STD, 0},
|
||||
{FALSE, CREATE_NEW_CONSOLE, CONSOLE_STD, 0},
|
||||
{FALSE, CREATE_NO_WINDOW, CONSOLE_STD, 0, TRUE},
|
||||
{FALSE, CREATE_NO_WINDOW, CONSOLE_STD, 0},
|
||||
/*10*/ {FALSE, DETACHED_PROCESS | CREATE_NO_WINDOW, CONSOLE_STD, 0},
|
||||
{FALSE, CREATE_NEW_CONSOLE | CREATE_NO_WINDOW, CONSOLE_STD, 0},
|
||||
|
||||
|
@ -5070,10 +5070,10 @@ static void test_CreateProcessCUI(void)
|
|||
/* 5 */ {TRUE, CREATE_NEW_PROCESS_GROUP, STARTUPINFO_STD, TRUE, CP_INH_CONSOLE | CP_WITH_WINDOW | CP_GROUP_LEADER},
|
||||
{TRUE, 0, STARTUPINFO_STD, FALSE, CP_INH_CONSOLE | CP_WITH_WINDOW | CP_ENABLED_CTRLC},
|
||||
{TRUE, CREATE_NEW_PROCESS_GROUP, STARTUPINFO_STD, FALSE, CP_INH_CONSOLE | CP_WITH_WINDOW | CP_GROUP_LEADER},
|
||||
{FALSE, 0, CONSOLE_STD, TRUE, 0, .is_todo = TRUE},
|
||||
{FALSE, CREATE_NEW_PROCESS_GROUP, CONSOLE_STD, TRUE, CP_GROUP_LEADER, .is_todo = TRUE},
|
||||
/* 10 */ {FALSE, 0, CONSOLE_STD, FALSE, CP_ENABLED_CTRLC, .is_todo = TRUE},
|
||||
{FALSE, CREATE_NEW_PROCESS_GROUP, CONSOLE_STD, FALSE, CP_GROUP_LEADER, .is_todo = TRUE},
|
||||
{FALSE, 0, CONSOLE_STD, TRUE, 0},
|
||||
{FALSE, CREATE_NEW_PROCESS_GROUP, CONSOLE_STD, TRUE, CP_GROUP_LEADER},
|
||||
/* 10 */ {FALSE, 0, CONSOLE_STD, FALSE, CP_ENABLED_CTRLC},
|
||||
{FALSE, CREATE_NEW_PROCESS_GROUP, CONSOLE_STD, FALSE, CP_GROUP_LEADER},
|
||||
{FALSE, 0, STARTUPINFO_STD, TRUE, 0, .is_todo = TRUE},
|
||||
{FALSE, CREATE_NEW_PROCESS_GROUP, STARTUPINFO_STD, TRUE, CP_GROUP_LEADER, .is_todo = TRUE},
|
||||
{FALSE, 0, STARTUPINFO_STD, FALSE, CP_ENABLED_CTRLC, .is_todo = TRUE},
|
||||
|
|
|
@ -3254,7 +3254,7 @@ static void test_StdHandleInheritance(void)
|
|||
{ARG_STD | ARG_CP_INHERIT | ARG_HANDLE_INHERIT | H_DISK, HATTR_TYPE | HATTR_INHERIT | FILE_TYPE_DISK, .is_todo = 6},
|
||||
|
||||
/* all others handles type behave as H_DISK */
|
||||
{ARG_STARTUPINFO | ARG_HANDLE_INHERIT | H_DISK, HATTR_NULL, .is_todo = 7, .is_broken = HATTR_TYPE | FILE_TYPE_UNKNOWN},
|
||||
{ARG_STARTUPINFO | ARG_HANDLE_INHERIT | H_DISK, HATTR_NULL, .is_todo = 6, .is_broken = HATTR_TYPE | FILE_TYPE_UNKNOWN},
|
||||
{ARG_STD | ARG_HANDLE_INHERIT | H_DISK, HATTR_TYPE | HATTR_INHERIT | FILE_TYPE_DISK, .is_todo = 6},
|
||||
},
|
||||
nothing_gui[] =
|
||||
|
@ -3270,8 +3270,8 @@ static void test_StdHandleInheritance(void)
|
|||
{ARG_STD | ARG_CP_INHERIT | ARG_HANDLE_INHERIT | H_CONSOLE, HATTR_NULL, .is_todo = 7, .is_broken = HATTR_TYPE | FILE_TYPE_UNKNOWN},
|
||||
|
||||
/* all others handles type behave as H_DISK */
|
||||
{ARG_STARTUPINFO | ARG_HANDLE_INHERIT | H_DISK, HATTR_NULL, .is_todo = 7, .is_broken = HATTR_TYPE | FILE_TYPE_UNKNOWN},
|
||||
{ARG_STD | ARG_HANDLE_INHERIT | H_DISK, HATTR_NULL, .is_todo = 7},
|
||||
{ARG_STARTUPINFO | ARG_HANDLE_INHERIT | H_DISK, HATTR_NULL, .is_todo = 6, .is_broken = HATTR_TYPE | FILE_TYPE_UNKNOWN},
|
||||
{ARG_STD | ARG_HANDLE_INHERIT | H_DISK, HATTR_NULL, .is_todo = 4},
|
||||
},
|
||||
detached_cui[] =
|
||||
{
|
||||
|
|
|
@ -2146,7 +2146,8 @@ void init_startup_info(void)
|
|||
/***********************************************************************
|
||||
* create_startup_info
|
||||
*/
|
||||
void *create_startup_info( const UNICODE_STRING *nt_image, const RTL_USER_PROCESS_PARAMETERS *params,
|
||||
void *create_startup_info( const UNICODE_STRING *nt_image, ULONG process_flags,
|
||||
const RTL_USER_PROCESS_PARAMETERS *params,
|
||||
const pe_image_info_t *pe_info, DWORD *info_size )
|
||||
{
|
||||
startup_info_t *info;
|
||||
|
@ -2175,9 +2176,13 @@ void *create_startup_info( const UNICODE_STRING *nt_image, const RTL_USER_PROCES
|
|||
info->console_flags = params->ConsoleFlags;
|
||||
if (pe_info->subsystem == IMAGE_SUBSYSTEM_WINDOWS_CUI)
|
||||
info->console = wine_server_obj_handle( params->ConsoleHandle );
|
||||
if ((process_flags & PROCESS_CREATE_FLAGS_INHERIT_HANDLES) ||
|
||||
(pe_info->subsystem == IMAGE_SUBSYSTEM_WINDOWS_CUI && !(params->dwFlags & STARTF_USESTDHANDLES)))
|
||||
{
|
||||
info->hstdin = wine_server_obj_handle( params->hStdInput );
|
||||
info->hstdout = wine_server_obj_handle( params->hStdOutput );
|
||||
info->hstderr = wine_server_obj_handle( params->hStdError );
|
||||
}
|
||||
info->x = params->dwX;
|
||||
info->y = params->dwY;
|
||||
info->xsize = params->dwXSize;
|
||||
|
|
|
@ -802,7 +802,7 @@ NTSTATUS WINAPI NtCreateUserProcess( HANDLE *process_handle_ptr, HANDLE *thread_
|
|||
goto done;
|
||||
}
|
||||
if (!machine) machine = pe_info.machine;
|
||||
if (!(startup_info = create_startup_info( attr.ObjectName, params, &pe_info, &startup_info_size )))
|
||||
if (!(startup_info = create_startup_info( attr.ObjectName, process_flags, params, &pe_info, &startup_info_size )))
|
||||
goto done;
|
||||
env_size = get_env_size( params, &winedebug );
|
||||
|
||||
|
|
|
@ -178,7 +178,8 @@ extern struct ldt_copy __wine_ldt_copy;
|
|||
|
||||
extern void init_environment( int argc, char *argv[], char *envp[] );
|
||||
extern void init_startup_info(void);
|
||||
extern void *create_startup_info( const UNICODE_STRING *nt_image, const RTL_USER_PROCESS_PARAMETERS *params,
|
||||
extern void *create_startup_info( const UNICODE_STRING *nt_image, ULONG process_flags,
|
||||
const RTL_USER_PROCESS_PARAMETERS *params,
|
||||
const pe_image_info_t *pe_info, DWORD *info_size );
|
||||
extern char **build_envp( const WCHAR *envW );
|
||||
extern char *get_alternate_wineloader( WORD machine );
|
||||
|
|
Loading…
Reference in a new issue