From 99292dbc62a0fce665c3df2d731ca149273527c5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicolas=20Fran=C3=A7ois?= Date: Mon, 19 Aug 2013 22:53:47 +0200 Subject: [PATCH] Check dup2 return values. * src/su.c: Check dup2 return values. --- ChangeLog | 4 ++++ src/su.c | 11 ++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) 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) -- 2.47.2