Richard W.M. Jones
2010-Aug-27 14:28 UTC
[Libguestfs] [PATCH] daemon: Set O_CLOEXEC flag on the virtio-serial port.
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 2001From: 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
Matthew Booth
2010-Aug-27 14:41 UTC
[Libguestfs] [PATCH] daemon: Set O_CLOEXEC flag on the virtio-serial port.
On 27/08/10 15:28, Richard W.M. Jones wrote:>> 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(-)ACK to this patch. I think it's worth also adding a test for this. The output of your debug command seems a reasonable thing to test. Matt -- Matthew Booth, RHCA, RHCSS Red Hat Engineering, Virtualisation Team GPG ID: D33C3490 GPG FPR: 3733 612D 2D05 5458 8A8A 1600 3441 EA19 D33C 3490