From: Christian Brauner Date: Sun, 8 Oct 2017 12:09:47 +0000 (+0200) Subject: openpty: close slave pty fd on error X-Git-Tag: glibc-2.27~717 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=98e0742024d4c13c08a6076b3d119c250e7d0118;p=thirdparty%2Fglibc.git openpty: close slave pty fd on error 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 --- diff --git a/ChangeLog b/ChangeLog index deec63d1a8b..e1e98adf1fd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2017-10-08 Christian Brauner + + * login/openpty.c (openpty): Close slave pty file descriptor on error. + 2017-10-06 Joseph Myers * sysdeps/ieee754/ldbl-128/s_fma.c: Include . diff --git a/login/openpty.c b/login/openpty.c index 41ab0483e25..9e556c27a5f 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)