From: Todd C. Miller Date: Tue, 14 Jan 2014 21:22:04 +0000 (-0700) Subject: When restoring fds traverse list from high -> low, not low -> high X-Git-Tag: SUDO_1_8_9p4~4 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8212a01f037bcd4ed62452c8df92ce94471c5ddb;p=sudo When restoring fds traverse list from high -> low, not low -> high to avoid implicitly closing an fd we want to relocate. --HG-- branch : 1.8 --- diff --git a/src/preserve_fds.c b/src/preserve_fds.c index e1ed57038..4cc5d2edf 100644 --- a/src/preserve_fds.c +++ b/src/preserve_fds.c @@ -166,7 +166,7 @@ closefrom_except(int startfd, struct preserved_fd_list *pfds) closefrom(startfd); /* Restore preserved fds and set flags. */ - TAILQ_FOREACH(pfd, pfds, entries) { + TAILQ_FOREACH_REVERSE(pfd, pfds, preserved_fd_list, entries) { if (pfd->lowfd != pfd->highfd) { if (dup2(pfd->lowfd, pfd->highfd) == -1) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO,