[Libguestfs] [PATCH] daemon: Set O_CLOEXEC flag on the virtio-serial port.
Richard W.M. Jones
rjones at redhat.com
Fri Aug 27 14:28:11 UTC 2010
You can see that currently we leak the virtio-serial file
descriptor into child processes.
><fs> debug fds ''
0 /dev/console
1 /dev/console
2 /dev/console
3 /dev/vport0p1
4 /proc/252/fd
><fs> debug sh 'ls -l /proc/self/fd'
total 0
lr-x------ 1 root root 64 Aug 27 15:14 0 -> /dev/null
l-wx------ 1 root root 64 Aug 27 15:14 1 -> pipe:[5124]
l-wx------ 1 root root 64 Aug 27 15:14 2 -> pipe:[5124]
lrwx------ 1 root root 64 Aug 27 15:14 3 -> /dev/vport0p1
lr-x------ 1 root root 64 Aug 27 15:14 4 -> /proc/271/fd
The attached patch fixes this by setting close-on-exec. I'm using
O_CLOEXEC which will only work with relatively recent versions of
Linux.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
virt-top is 'top' for virtual machines. Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://et.redhat.com/~rjones/virt-top
-------------- next part --------------
>From 272a763c6125a8c7ad54aae5bb048f427df07868 Mon Sep 17 00:00:00 2001
From: Richard Jones <rjones at redhat.com>
Date: Fri, 27 Aug 2010 15:27:22 +0100
Subject: [PATCH] daemon: Set O_CLOEXEC flag on the virtio-serial port.
---
daemon/guestfsd.c | 8 +++++++-
1 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/daemon/guestfsd.c b/daemon/guestfsd.c
index 8130524..e398b7d 100644
--- a/daemon/guestfsd.c
+++ b/daemon/guestfsd.c
@@ -60,6 +60,11 @@ static char *read_cmdline (void);
# define MAX(a,b) ((a)>(b)?(a):(b))
#endif
+/* Not the end of the world if this open flag is not defined. */
+#ifndef O_CLOEXEC
+# define O_CLOEXEC 0
+#endif
+
/* If root device is an ext2 filesystem, this is the major and minor.
* This is so we can ignore this device from the point of view of the
* user, eg. in guestfs_list_devices and many other places.
@@ -237,7 +242,8 @@ main (int argc, char *argv[])
#endif
/* Connect to virtio-serial channel. */
- int sock = open ("/dev/virtio-ports/org.libguestfs.channel.0", O_RDWR);
+ int sock = open ("/dev/virtio-ports/org.libguestfs.channel.0",
+ O_RDWR | O_CLOEXEC);
if (sock == -1) {
fprintf (stderr,
"\n"
--
1.7.1
More information about the Libguestfs
mailing list