Zebediah Figura : server: Do not forbid closing fd handles in other processes.

Alexandre Julliard julliard at winehq.org
Tue Mar 23 16:54:31 CDT 2021


Module: wine
Branch: master
Commit: 101082253f1e9645fbe96e2f4ffd4ff27c30963d
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=101082253f1e9645fbe96e2f4ffd4ff27c30963d

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Mon Mar 22 23:04:30 2021 -0500

server: Do not forbid closing fd handles in other processes.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 server/change.c     | 1 -
 server/console.c    | 2 +-
 server/fd.c         | 6 ------
 server/file.c       | 2 +-
 server/file.h       | 1 -
 server/mailslot.c   | 6 +++---
 server/mapping.c    | 2 +-
 server/named_pipe.c | 6 +++---
 server/serial.c     | 2 +-
 server/sock.c       | 2 +-
 10 files changed, 11 insertions(+), 19 deletions(-)

diff --git a/server/change.c b/server/change.c
index ff8c3ad1037..b02a9cd65bf 100644
--- a/server/change.c
+++ b/server/change.c
@@ -421,7 +421,6 @@ static int dir_close_handle( struct object *obj, struct process *process, obj_ha
 {
     struct dir *dir = (struct dir *)obj;
 
-    if (!fd_close_handle( obj, process, handle )) return 0;
     if (obj->handle_count == 1) release_dir_cache_entry( dir ); /* closing last handle, release cache */
     return 1;  /* ok to close */
 }
diff --git a/server/console.c b/server/console.c
index 848ee6e8d98..1e6f6c0f8a3 100644
--- a/server/console.c
+++ b/server/console.c
@@ -168,7 +168,7 @@ static const struct object_ops console_server_ops =
     NULL,                             /* unlink_name */
     console_server_open_file,         /* open_file */
     no_kernel_obj_list,               /* get_kernel_obj_list */
-    fd_close_handle,                  /* close_handle */
+    no_close_handle,                  /* close_handle */
     console_server_destroy            /* destroy */
 };
 
diff --git a/server/fd.c b/server/fd.c
index 65a6f876e5c..481e9a88f0f 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -2118,12 +2118,6 @@ void set_fd_signaled( struct fd *fd, int signaled )
     if (signaled) wake_up( fd->user, 0 );
 }
 
-/* handler for close_handle that refuses to close fd-associated handles in other processes */
-int fd_close_handle( struct object *obj, struct process *process, obj_handle_t handle )
-{
-    return (!current || current->process == process);
-}
-
 /* check if events are pending and if yes return which one(s) */
 int check_fd_events( struct fd *fd, int events )
 {
diff --git a/server/file.c b/server/file.c
index f9ce0106c3b..9a072e6c64e 100644
--- a/server/file.c
+++ b/server/file.c
@@ -109,7 +109,7 @@ static const struct object_ops file_ops =
     NULL,                         /* unlink_name */
     file_open_file,               /* open_file */
     file_get_kernel_obj_list,     /* get_kernel_obj_list */
-    fd_close_handle,              /* close_handle */
+    no_close_handle,              /* close_handle */
     file_destroy                  /* destroy */
 };
 
diff --git a/server/file.h b/server/file.h
index fbfd1e4eec9..0fa66e5750a 100644
--- a/server/file.h
+++ b/server/file.h
@@ -93,7 +93,6 @@ extern int is_fd_overlapped( struct fd *fd );
 extern int get_unix_fd( struct fd *fd );
 extern int is_same_file_fd( struct fd *fd1, struct fd *fd2 );
 extern int is_fd_removable( struct fd *fd );
-extern int fd_close_handle( struct object *obj, struct process *process, obj_handle_t handle );
 extern int check_fd_events( struct fd *fd, int events );
 extern void set_fd_events( struct fd *fd, int events );
 extern obj_handle_t lock_fd( struct fd *fd, file_pos_t offset, file_pos_t count, int shared, int wait );
diff --git a/server/mailslot.c b/server/mailslot.c
index 5597a21dd29..d4b2fd1b562 100644
--- a/server/mailslot.c
+++ b/server/mailslot.c
@@ -90,7 +90,7 @@ static const struct object_ops mailslot_ops =
     default_unlink_name,       /* unlink_name */
     mailslot_open_file,        /* open_file */
     no_kernel_obj_list,        /* get_kernel_obj_list */
-    fd_close_handle,           /* close_handle */
+    no_close_handle,           /* close_handle */
     mailslot_destroy           /* destroy */
 };
 
@@ -148,7 +148,7 @@ static const struct object_ops mail_writer_ops =
     NULL,                       /* unlink_name */
     no_open_file,               /* open_file */
     no_kernel_obj_list,         /* get_kernel_obj_list */
-    fd_close_handle,            /* close_handle */
+    no_close_handle,            /* close_handle */
     mail_writer_destroy         /* destroy */
 };
 
@@ -240,7 +240,7 @@ static const struct object_ops mailslot_device_file_ops =
     NULL,                                   /* unlink_name */
     no_open_file,                           /* open_file */
     no_kernel_obj_list,                     /* get_kernel_obj_list */
-    fd_close_handle,                        /* close_handle */
+    no_close_handle,                        /* close_handle */
     mailslot_device_file_destroy            /* destroy */
 };
 
diff --git a/server/mapping.c b/server/mapping.c
index 13a0948a8ab..0dcaa13e91d 100644
--- a/server/mapping.c
+++ b/server/mapping.c
@@ -189,7 +189,7 @@ static const struct object_ops mapping_ops =
     default_unlink_name,         /* unlink_name */
     no_open_file,                /* open_file */
     no_kernel_obj_list,          /* get_kernel_obj_list */
-    fd_close_handle,             /* close_handle */
+    no_close_handle,             /* close_handle */
     mapping_destroy              /* destroy */
 };
 
diff --git a/server/named_pipe.c b/server/named_pipe.c
index a3ce9d463f1..df8c7e3170c 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -179,7 +179,7 @@ static const struct object_ops pipe_server_ops =
     NULL,                         /* unlink_name */
     pipe_server_open_file,        /* open_file */
     no_kernel_obj_list,           /* get_kernel_obj_list */
-    fd_close_handle,              /* close_handle */
+    no_close_handle,              /* close_handle */
     pipe_server_destroy           /* destroy */
 };
 
@@ -222,7 +222,7 @@ static const struct object_ops pipe_client_ops =
     NULL,                         /* unlink_name */
     no_open_file,                 /* open_file */
     no_kernel_obj_list,           /* get_kernel_obj_list */
-    fd_close_handle,              /* close_handle */
+    no_close_handle,              /* close_handle */
     pipe_end_destroy              /* destroy */
 };
 
@@ -299,7 +299,7 @@ static const struct object_ops named_pipe_device_file_ops =
     NULL,                                    /* unlink_name */
     no_open_file,                            /* open_file */
     no_kernel_obj_list,                      /* get_kernel_obj_list */
-    fd_close_handle,                         /* close_handle */
+    no_close_handle,                         /* close_handle */
     named_pipe_device_file_destroy           /* destroy */
 };
 
diff --git a/server/serial.c b/server/serial.c
index ba8402c5935..d3ea4cbe420 100644
--- a/server/serial.c
+++ b/server/serial.c
@@ -104,7 +104,7 @@ static const struct object_ops serial_ops =
     NULL,                         /* unlink_name */
     no_open_file,                 /* open_file */
     no_kernel_obj_list,           /* get_kernel_obj_list */
-    fd_close_handle,              /* close_handle */
+    no_close_handle,              /* close_handle */
     serial_destroy                /* destroy */
 };
 
diff --git a/server/sock.c b/server/sock.c
index 775ec6edf32..00d5b0b9044 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -889,7 +889,7 @@ static int sock_close_handle( struct object *obj, struct process *process, obj_h
             async_terminate( req->async, STATUS_CANCELLED );
     }
 
-    return fd_close_handle( obj, process, handle );
+    return 1;
 }
 
 static void sock_destroy( struct object *obj )




More information about the wine-cvs mailing list