From cb5b0deec490ce30a32f2c0be99d66daced48f93 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Mon, 4 May 2026 14:18:06 -0500 Subject: [PATCH] Make exec redirects close saved high filehandles before discarding urd. --- toys/pending/sh.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/toys/pending/sh.c b/toys/pending/sh.c index 09319d60..ef6cd3bd 100644 --- a/toys/pending/sh.c +++ b/toys/pending/sh.c @@ -4935,9 +4935,18 @@ void exec_main(void) char *ee[1] = {0}, **old = environ; // discard redirects and return if nothing to exec - free(TT.ff->pp->urd); - TT.ff->pp->urd = 0; - if (!toys.optc) return; + if (!toys.optc) { + int i, j, *urd = TT.ff->pp->urd, *rr = urd+1; + + // Close saved high file descriptors marked CLOEXEC + for (i = 0; i<*urd; i++, rr += 2) + if (rr[0]!=-1 && -1!=(j = fcntl(rr[0], F_GETFL)) && (j&FD_CLOEXEC)) + close(rr[0]); + free(urd); + TT.ff->pp->urd = 0; + + return; + } //TODO zap isexec // exec, handling -acl -- 2.39.5