From: Nicolas François Date: Mon, 19 Aug 2013 20:53:47 +0000 (+0200) Subject: Check dup2 return values. X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=99292dbc62a0fce665c3df2d731ca149273527c5;p=thirdparty%2Fshadow.git Check dup2 return values. * src/su.c: Check dup2 return values. --- diff --git a/ChangeLog b/ChangeLog index 10deaa909..df00cfdc8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-08-19 Nicolas François + + * src/su.c: Check dup2 return values. + 2013-08-15 Wolfgang Zarre * src/su.c: Create a pseudo TTY to avoid character injection from diff --git a/src/su.c b/src/su.c index d2fb8c85b..67ba1bcb7 100644 --- a/src/su.c +++ b/src/su.c @@ -351,9 +351,14 @@ static void handle_session (void) if (winsz_set == true && ioctl (fd_pts, TIOCSWINSZ, &winsz) == -1) fprintf (stderr, _("%s: Cannot set window size of session %d\n"), Prog, errno); - dup2 (fd_pts, STDIN_FILENO); - dup2 (fd_pts, STDOUT_FILENO); - dup2 (fd_pts, STDERR_FILENO); + if ( (dup2 (fd_pts, STDIN_FILENO) == -1) + || (dup2 (fd_pts, STDOUT_FILENO) == -1) + || (dup2 (fd_pts, STDERR_FILENO) == -1)) { + fprintf (stderr, + _("%s: Cannot prepare new terminal\n"), + Prog); + exit (1); + } if (STDIN_FILENO != fd_pts && STDOUT_FILENO != fd_pts && STDERR_FILENO != fd_pts)