|
|
|
|
|
|
|
|
|
|
xen-devel
[Xen-devel] [PATCH] Ensure FD_CLOEXEC is set on all XenD file handles
While debugging an issue with libvirt I discovered a serious problem
with XenD's management of file handles. Basically it does not set the
close-on-exec flag on any[1] of the file handles it has open. This means
that all XenD's file handles propagated to programs it spawns - eg, the
network device setup scripts, qemu-dm and others those in turn spawn.
The particular case that lead me to discover the problem was when I disabled
HTTP port on XenD and wondered why port 8000 was still in LISTEN state - it
turned out qemu-dm had a handle to the server socket. Aside from this it had
access to about 10 open handles on /proc/xen/privcmd, the HTTP *client*
connection which requested the domain creation[2], and any of the other
server sockets XenD happened to have open.
I'm attaching three prototype patches - I say prototype because there may
be other (better) places to set the FD_CLOEXEC flag - I've just picked
the place closest to the original socket()/accept() call.
* xen-xend2-cloexec.patch - set the flag on the XMLRPC & HTTP server
ports, both TCP & UNIX domain socket versions. Also ensure incoming
clients have it set
* xen-xc-cloexec.patch - set the flag on all handles to /proc/xen/privcmd
* xen-xs2-cloexec.patch - set the flag on all connections to the
xenstore daemon.
The only file handle I've not yet set the flag on is the one to the log
file /var/log/xend.log which (in my system) ends up on FD #9.
To test which file handles were being left open I created a dummy script:
$ cat > /root/fake-qemu-dm.sh <<EOF
#!/bin/sh
lsof -P -n -p $$ >> /tmp/qemu-fds.log
exec /usr/lib64/xen/bin/qemu-dm "$@"
EOF
$
And then in the domain's config file set 'device_model' to point to the
file '/root/fake-qemu-dm.sh'
BTW, the patches were prepared against the latest Xen userspace code in
Fedora Core 6, test2 - this is trailing xen-unstable by a couple of weeks
but I think they should still apply. If people agree with the approach
taken in the patch I'll re-diff against xen-unstable before posting again.
Regards,
Dan.
[1] Actually it turns out the relocation port does have the flag set
[2] This explains an issue discovered with libvirt where it would hang
forever after creating an HVM domain waiting for the server to close
its end of the socket
--
|=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=|
|=- Perl modules: http://search.cpan.org/~danberr/ -=|
|=- Projects: http://freshmeat.net/~danielpb/ -=|
|=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|
xen-xc-cloexec.patch
Description: Text document
xen-xend2-cloexec.patch
Description: Text document
xen-xs2-cloexec.patch
Description: Text document
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
<Prev in Thread] |
Current Thread |
[Next in Thread>
|
- [Xen-devel] [PATCH] Ensure FD_CLOEXEC is set on all XenD file handles,
Daniel P. Berrange <=
|
|
|
|
|