Alexandre Julliard : server:
Explicitly shutdown closed pipes to prevent access from file
descriptors cached in the client .
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Apr 10 14:58:05 CDT 2007
Module: wine
Branch: master
Commit: bc426ab059d9cf279755f113fda2780e860b7b7c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=bc426ab059d9cf279755f113fda2780e860b7b7c
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Apr 10 21:30:37 2007 +0200
server: Explicitly shutdown closed pipes to prevent access from file descriptors cached in the client.
---
dlls/ntdll/file.c | 2 +-
server/mailslot.c | 2 ++
server/named_pipe.c | 1 +
3 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 8158a14..b3f5379 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -282,7 +282,7 @@ NTSTATUS FILE_GetNtStatus(void)
case ENFILE: return STATUS_TOO_MANY_OPENED_FILES;
case EINVAL: return STATUS_INVALID_PARAMETER;
case ENOTEMPTY: return STATUS_DIRECTORY_NOT_EMPTY;
- case EPIPE: return STATUS_PIPE_BROKEN;
+ case EPIPE: return STATUS_PIPE_DISCONNECTED;
case EIO: return STATUS_DEVICE_NOT_READY;
#ifdef ENOMEDIUM
case ENOMEDIUM: return STATUS_NO_MEDIA_IN_DEVICE;
diff --git a/server/mailslot.c b/server/mailslot.c
index d130f6e..b29c84e 100644
--- a/server/mailslot.c
+++ b/server/mailslot.c
@@ -197,6 +197,7 @@ static void mailslot_destroy( struct object *obj)
assert( mailslot->fd );
assert( mailslot->write_fd );
+ shutdown( get_unix_fd( mailslot->fd ), SHUT_RDWR );
release_object( mailslot->fd );
release_object( mailslot->write_fd );
}
@@ -408,6 +409,7 @@ static struct mailslot *create_mailslot( struct directory *root,
{
fcntl( fds[0], F_SETFL, O_NONBLOCK );
fcntl( fds[1], F_SETFL, O_NONBLOCK );
+ shutdown( fds[0], SHUT_RD );
mailslot->fd = create_anonymous_fd( &mailslot_fd_ops,
fds[1], &mailslot->obj );
mailslot->write_fd = create_anonymous_fd( &mail_writer_fd_ops,
diff --git a/server/named_pipe.c b/server/named_pipe.c
index 4b23816..527e4c8 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -338,6 +338,7 @@ static void do_disconnect( struct pipe_server *server )
server->client->fd = NULL;
}
assert( server->fd );
+ shutdown( get_unix_fd( server->fd ), SHUT_RDWR );
release_object( server->fd );
server->fd = NULL;
}
More information about the wine-cvs
mailing list