summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2018-12-21 09:09:55 +0100
committerJo-Philipp Wich <jo@mein.io>2018-12-21 09:18:23 +0100
commit67118a6b334cd50c9f39a0c04506befd49bf592a (patch)
tree4423b97ef1fa1e2594b909c6bfad8ad8f3912397
parent2e8106ac5683be723b7f4e4ee522678b60b5ab50 (diff)
downloadrpcd-67118a6b334cd50c9f39a0c04506befd49bf592a.tar.gz
file: patch process stdin to /dev/null
This prevents broken pipe errors in executed child processes that attempt to access stdin. Suggested-by: Vytautas Virvičius <vy.virvicius@gmail.com> Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r--file.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/file.c b/file.c
index 09b4afd..23deb73 100644
--- a/file.c
+++ b/file.c
@@ -597,6 +597,7 @@ rpc_file_exec_run(const char *cmd,
{
pid_t pid;
+ int devnull;
int opipe[2];
int epipe[2];
@@ -629,10 +630,16 @@ rpc_file_exec_run(const char *cmd,
case 0:
uloop_done();
+ devnull = open("/dev/null", O_RDWR);
+
+ if (devnull == -1)
+ return UBUS_STATUS_UNKNOWN_ERROR;
+
+ dup2(devnull, 0);
dup2(opipe[1], 1);
dup2(epipe[1], 2);
- close(0);
+ close(devnull);
close(opipe[0]);
close(opipe[1]);
close(epipe[0]);