We parse --fd twice: once in isolate_initial() just to avoid clobbering
the passed in fd. Then we parse it "for real" in conf(), to set c->fd_tap
and other configuration variables.
Change this, so that we return the value parsed early from
isolate_initial() and set c->fd_tap from that. This doesn't accomplish
much immediately, but will make some further cleanups possible.
Signed-off-by: David Gibson
---
conf.c | 2 +-
isolation.c | 6 +++++-
isolation.h | 2 +-
passt.c | 2 +-
4 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/conf.c b/conf.c
index 6d83daef..41c9d557 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 07b281bb..4bb79e34 100644
--- a/isolation.c
+++ b/isolation.c
@@ -203,8 +203,10 @@ static int move_root(void)
* - close all open files except for standard streams and the one from --fd
* Mustn't:
* - remove filesystem access (we need to access files during setup)
+ *
+ * Return: fd number from --fd, or -1 if not specified
*/
-void isolate_initial(int argc, char **argv)
+int isolate_initial(int argc, char **argv)
{
const struct option optfd[] = { { "fd", required_argument, NULL, 'F' },
{ 0 }, };
@@ -280,6 +282,8 @@ void isolate_initial(int argc, char **argv)
die_perror("Failed to close files leaked by parent");
}
}
+
+ return fd_tap;
}
/**
diff --git a/isolation.h b/isolation.h
index 66b6968d..ef27c7d5 100644
--- a/isolation.h
+++ b/isolation.h
@@ -10,7 +10,7 @@
#include
#include
-void isolate_initial(int argc, char **argv);
+int isolate_initial(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 65a07d72..b99e5998 100644
--- a/passt.c
+++ b/passt.c
@@ -341,7 +341,7 @@ int main(int argc, char **argv)
arch_avx2_exec(argv);
- isolate_initial(argc, argv);
+ c->fd_tap = isolate_initial(argc, argv);
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
--
2.55.0