aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Melkov <melkov@comptek.ru>2023-11-22 04:46:28 +0000
committerKyle Evans <kevans@FreeBSD.org>2023-12-15 00:58:20 +0000
commit579c24898b89b87dc86095c3e55c1b1f8fca5e1e (patch)
tree5072e4dfff0b0c9a07279690845422b7d637ac27
parent6128f0c28db5c77374e1898e16f44131ebebc861 (diff)
downloadsrc-579c24898b89b87dc86095c3e55c1b1f8fca5e1e.tar.gz
src-579c24898b89b87dc86095c3e55c1b1f8fca5e1e.zip
lockf: don't hold stdin/stdout/stderr open
None of these are essential in the lockf monitor (parent post-fork), so close them to maintain the illusion that lockf hasn't been inserted into the pipeline. This ensures that the correct effects happen on other programs in the pipeline if the locked command closes or redirects these elsewhere. The original patch used -s to close stdout/stderr rather than closing them unconditionally, but it's not clear that we really care that much. kevans dropped that part when taking the patch, patch is otherwise by listed author. PR: 112379 Reviewed by: 0mp, allanjude (both earlier version), kevans Feedback from: des Sponsored by: Klara, Inc. (cherry picked from commit 18425c19cae08cbe41801845457ed67285806688)
-rw-r--r--usr.bin/lockf/lockf.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/usr.bin/lockf/lockf.c b/usr.bin/lockf/lockf.c
index ff1e7a6d6216..620193cba1d7 100644
--- a/usr.bin/lockf/lockf.c
+++ b/usr.bin/lockf/lockf.c
@@ -157,8 +157,11 @@ main(int argc, char **argv)
signal(SIGINT, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGTERM, killed);
+ fclose(stdin);
+ fclose(stdout);
+ fclose(stderr);
if (waitpid(child, &status, 0) == -1)
- err(EX_OSERR, "waitpid failed");
+ exit(EX_OSERR);
return (WIFEXITED(status) ? WEXITSTATUS(status) : EX_SOFTWARE);
}
@@ -210,7 +213,7 @@ killed(int sig)
cleanup();
signal(sig, SIG_DFL);
if (kill(getpid(), sig) == -1)
- err(EX_OSERR, "kill failed");
+ _Exit(EX_OSERR);
}
/*