From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 117582 invoked by alias); 29 Aug 2017 14:31:09 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 115858 invoked by uid 89); 29 Aug 2017 14:31:03 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.6 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.2 spammy=(unknown) X-HELO: mx2.mailbox.org From: Christian Brauner To: libc-alpha@sourceware.org, fweimer@redhat.com, joseph@codesourcery.com, schwab@suse.de Cc: Christian Brauner Subject: [PATCH 1/2 v5] openpty: close slave pty fd on error Date: Tue, 29 Aug 2017 14:31:00 -0000 Message-Id: <20170829143037.24231-1-christian.brauner@ubuntu.com> In-Reply-To: References: X-SW-Source: 2017-08/txt/msg01244.txt.bz2 When openpty() failed only the master fd was closed so far. Let's close the slave fd as well. Also, let's unify the error handling. Signed-off-by: Christian Brauner --- Changelog 2017-08-29: * Unify error handling: use a common function exit that frees everything that needs freeing. (@Florian) Changelog 2017-08-29: * Do not be stupid and only close the file descriptors on error! Duh. (Thanks, @Andreas) --- ChangeLog | 4 ++++ login/openpty.c | 30 ++++++++++++++++-------------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index bc1cf94dc3..bc5fb8e27f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2017-08-26 Christian Brauner + + * login/openpty.c (openpty): Close slave pty file descriptor on error. + 2017-08-25 H.J. Lu * sysdeps/x86/cpu-features.h [__ASSEMBLER__] diff --git a/login/openpty.c b/login/openpty.c index 41ab0483e2..9e556c27a5 100644 --- a/login/openpty.c +++ b/login/openpty.c @@ -92,29 +92,24 @@ openpty (int *amaster, int *aslave, char *name, char _buf[512]; #endif char *buf = _buf; - int master, slave; + int master, ret = -1, slave = -1; master = getpt (); if (master == -1) return -1; if (grantpt (master)) - goto fail; + goto on_error; if (unlockpt (master)) - goto fail; + goto on_error; if (pts_name (master, &buf, sizeof (_buf))) - goto fail; + goto on_error; slave = open (buf, O_RDWR | O_NOCTTY); if (slave == -1) - { - if (buf != _buf) - free (buf); - - goto fail; - } + goto on_error; /* XXX Should we ignore errors here? */ if (termp) @@ -129,12 +124,19 @@ openpty (int *amaster, int *aslave, char *name, if (name != NULL) strcpy (name, buf); + ret = 0; + + on_error: + if (ret == -1) { + close (master); + + if (slave != -1) + close (slave); + } + if (buf != _buf) free (buf); - return 0; - fail: - close (master); - return -1; + return ret; } libutil_hidden_def (openpty) -- 2.14.1