aboutgitcodebugslistschat
diff options
context:
space:
mode:
-rw-r--r--conf.c2
-rw-r--r--isolation.c6
-rw-r--r--isolation.h2
-rw-r--r--passt.c2
4 files changed, 8 insertions, 4 deletions
diff --git a/conf.c b/conf.c
index 5b6cc2b..b3211e5 100644
--- a/conf.c
+++ b/conf.c
@@ -1593,7 +1593,7 @@ void conf(struct ctx *c, int argc, char **argv)
c->fd_control_listen = c->fd_control = -1;
break;
case 'F':
- c->fd_tap = conf_tap_fd(optarg);
+ /* --fd was parsed early and c->fd_tap set in main() */
c->one_off = true;
*c->sock_path = 0;
break;
diff --git a/isolation.c b/isolation.c
index ea85fdb..c9dfefa 100644
--- a/isolation.c
+++ b/isolation.c
@@ -257,8 +257,10 @@ void isolate_initial(void)
*
* Should:
* - close all open files except for standard streams and the one from --fd
+ *
+ * Return: fd number from --fd, or -1 if not specified
*/
-void isolate_fds(int argc, char **argv)
+int isolate_fds(int argc, char **argv)
{
const struct option optfd[] = { { "fd", required_argument, NULL, 'F' },
{ 0 }, };
@@ -296,6 +298,8 @@ void isolate_fds(int argc, char **argv)
die_perror("Failed to close files leaked by parent");
}
}
+
+ return fd;
}
/**
diff --git a/isolation.h b/isolation.h
index e1b1bc5..ec47038 100644
--- a/isolation.h
+++ b/isolation.h
@@ -11,7 +11,7 @@
#include <unistd.h>
void isolate_initial(void);
-void isolate_fds(int argc, char **argv);
+int isolate_fds(int argc, char **argv);
void isolate_user(const struct ctx *c, uid_t uid, gid_t gid, bool use_userns,
const char *userns);
int isolate_prefork(const struct ctx *c);
diff --git a/passt.c b/passt.c
index a5ab1b5..5279af9 100644
--- a/passt.c
+++ b/passt.c
@@ -345,7 +345,7 @@ int main(int argc, char **argv)
arch_avx2_exec(argv);
isolate_initial();
- isolate_fds(argc, argv);
+ c->fd_tap = isolate_fds(argc, argv);
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;