From 49f12d65d86fe0005dd446adf67caa48776e21b0 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Mon, 22 Mar 2021 16:14:31 +0100 Subject: [PATCH] ntdll: Don't return an existing address when mapping a builtin PE dll. Signed-off-by: Alexandre Julliard --- dlls/ntdll/unix/virtual.c | 44 +++------------------------------------ 1 file changed, 3 insertions(+), 41 deletions(-) diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c index 06b9c02a73f..8ceba611875 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c @@ -87,8 +87,6 @@ struct builtin_module { struct list entry; unsigned int refcount; - dev_t dev; - ino_t ino; void *handle; void *module; char *unix_name; @@ -565,7 +563,7 @@ static void mmap_init( const struct preload_info *preload_info ) /*********************************************************************** * add_builtin_module */ -static void add_builtin_module( void *module, void *handle, const struct stat *st ) +static void add_builtin_module( void *module, void *handle ) { struct builtin_module *builtin; @@ -576,16 +574,6 @@ static void add_builtin_module( void *module, void *handle, const struct stat *s builtin->unix_name = NULL; builtin->unix_handle = NULL; builtin->unix_entry = NULL; - if (st) - { - builtin->dev = st->st_dev; - builtin->ino = st->st_ino; - } - else - { - builtin->dev = 0; - builtin->ino = 0; - } list_add_tail( &builtin_modules, &builtin->entry ); } @@ -614,19 +602,6 @@ NTSTATUS release_builtin_module( void *module ) } -/*********************************************************************** - * find_builtin_module - */ -static void *find_builtin_module( const struct stat *st ) -{ - struct builtin_module *builtin; - - LIST_FOR_EACH_ENTRY( builtin, &builtin_modules, struct builtin_module, entry ) - if (builtin->dev == st->st_dev && builtin->ino == st->st_ino) return builtin->module; - return NULL; -} - - /*********************************************************************** * get_builtin_so_handle */ @@ -2411,7 +2386,6 @@ static NTSTATUS virtual_map_image( HANDLE mapping, ACCESS_MASK access, void **ad SIZE_T size = image_info->map_size; struct file_view *view; NTSTATUS status; - struct stat st; sigset_t sigset; void *base; @@ -2428,18 +2402,6 @@ static NTSTATUS virtual_map_image( HANDLE mapping, ACCESS_MASK access, void **ad status = STATUS_INVALID_PARAMETER; server_enter_uninterrupted_section( &virtual_mutex, &sigset ); - if (is_builtin) /* check for already loaded builtin */ - { - fstat( unix_fd, &st ); - if ((base = find_builtin_module( &st ))) - { - *addr_ptr = base; - *size_ptr = size; - status = STATUS_SUCCESS; - goto done; - } - } - base = wine_server_get_ptr( image_info->base ); if ((ULONG_PTR)base != image_info->base) base = NULL; @@ -2465,7 +2427,7 @@ static NTSTATUS virtual_map_image( HANDLE mapping, ACCESS_MASK access, void **ad } if (status >= 0) { - if (is_builtin) add_builtin_module( view->base, NULL, &st ); + if (is_builtin) add_builtin_module( view->base, NULL ); *addr_ptr = view->base; *size_ptr = size; VIRTUAL_DEBUG_DUMP_VIEW( view ); @@ -2832,7 +2794,7 @@ NTSTATUS virtual_create_builtin_view( void *module, const UNICODE_STRING *nt_nam if (status >= 0) { - add_builtin_module( view->base, so_handle, NULL ); + add_builtin_module( view->base, so_handle ); VIRTUAL_DEBUG_DUMP_VIEW( view ); if (is_beyond_limit( base, size, working_set_limit )) working_set_limit = address_space_limit; }