]> xenbits.xensource.com Git - xen.git/commitdiff
tools/libxs: Open /dev/xen/xenbus fds as O_CLOEXEC
authorAndrew Cooper <andrew.cooper3@citrix.com>
Sat, 4 May 2024 01:10:33 +0000 (02:10 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Tue, 7 May 2024 14:18:36 +0000 (15:18 +0100)
The header description for xs_open() goes as far as to suggest that the fd is
O_CLOEXEC, but it isn't actually.

`xl devd` has been observed leaking /dev/xen/xenbus into children.

Link: https://github.com/QubesOS/qubes-issues/issues/8292
Reported-by: Demi Marie Obenour <demi@invisiblethingslab.com>
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
tools/libs/store/xs.c

index 140b9a28395edfc7218cc7d4f73a60b22aacf865..14985150737e023a0ccdaf7977531712232101e8 100644 (file)
@@ -54,6 +54,10 @@ struct xs_stored_msg {
 #include <dlfcn.h>
 #endif
 
+#ifndef O_CLOEXEC
+#define O_CLOEXEC 0
+#endif
+
 struct xs_handle {
        /* Communications channel to xenstore daemon. */
        int fd;
@@ -227,7 +231,7 @@ error:
 static int get_dev(const char *connect_to)
 {
        /* We cannot open read-only because requests are writes */
-       return open(connect_to, O_RDWR);
+       return open(connect_to, O_RDWR | O_CLOEXEC);
 }
 
 static int all_restrict_cb(Xentoolcore__Active_Handle *ah, domid_t domid) {