From e6bb3d69422d948373b10074b043a8ef0189b1de Mon Sep 17 00:00:00 2001 From: Tiago Cunha Date: Sun, 29 Aug 2010 14:39:45 +0000 Subject: [PATCH] Sync OpenBSD patchset 750: Do not need to dup() the tty fd sent from the client because it is already dup()d again later. Fixes a leak seen by espie@. --- server-client.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/server-client.c b/server-client.c index d60ee1d8..43af341f 100644 --- a/server-client.c +++ b/server-client.c @@ -1,4 +1,4 @@ -/* $Id: server-client.c,v 1.39 2010-08-11 22:16:03 tcunha Exp $ */ +/* $Id: server-client.c,v 1.40 2010-08-29 14:39:45 tcunha Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -695,17 +695,15 @@ server_client_msg_dispatch(struct client *c) fatalx("MSG_IDENTIFY missing fd"); memcpy(&identifydata, imsg.data, sizeof identifydata); - c->stdin_fd = dup(imsg.fd); - if (c->stdin_fd == -1) - fatal("dup failed"); + c->stdin_fd = imsg.fd; c->stdin_event = bufferevent_new(c->stdin_fd, NULL, NULL, server_client_in_callback, c); if (c->stdin_event == NULL) fatalx("failed to create stdin event"); - if ((mode = fcntl(imsg.fd, F_GETFL)) != -1) - fcntl(imsg.fd, F_SETFL, mode|O_NONBLOCK); - if (fcntl(imsg.fd, F_SETFD, FD_CLOEXEC) == -1) + if ((mode = fcntl(c->stdin_fd, F_GETFL)) != -1) + fcntl(c->stdin_fd, F_SETFL, mode|O_NONBLOCK); + if (fcntl(c->stdin_fd, F_SETFD, FD_CLOEXEC) == -1) fatal("fcntl failed"); server_client_msg_identify(c, &identifydata, imsg.fd);