]> xenbits.xensource.com Git - xen.git/commitdiff
tools/ocaml: Dup2 /dev/null to stdin in daemonize()
authorChristian Lindig <christian.lindig@citrix.com>
Wed, 27 Feb 2019 10:33:42 +0000 (10:33 +0000)
committerIan Jackson <ian.jackson@eu.citrix.com>
Thu, 16 May 2019 16:01:20 +0000 (17:01 +0100)
Don't close stdin in daemonize() but dup2 /dev/null instead.  Otherwise, fd 0
gets reused later:

  [root@idol ~]# ls -lav /proc/`pgrep xenstored`/fd
  total 0
  dr-x------ 2 root root  0 Feb 28 11:02 .
  dr-xr-xr-x 9 root root  0 Feb 27 15:59 ..
  lrwx------ 1 root root 64 Feb 28 11:02 0 -> /dev/xen/evtchn
  l-wx------ 1 root root 64 Feb 28 11:02 1 -> /dev/null
  l-wx------ 1 root root 64 Feb 28 11:02 2 -> /dev/null
  lrwx------ 1 root root 64 Feb 28 11:02 3 -> /dev/xen/privcmd
  ...

Signed-off-by: Christian Lindig <christian.lindig@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Release-acked-by: Juergen Gross <jgross@suse.com>
(cherry picked from commit 677e64dbe315343620c3b266e9eb16623b118038)
(cherry picked from commit 4b72470175a592fb5c0a5d10ed505de73778e10f)
(cherry picked from commit 5cfbc0ffd563a2ee3abfcce74eb3c20d82a7a035)
(cherry picked from commit 3db28b0babfb3db7b5bbf9799da6884453290312)
(cherry picked from commit d929136ca8e2a1a8cb7dfdd18f828574619e3953)

tools/ocaml/xenstored/stdext.ml

index b8a8fd00e1dbcccb088664db3b98bea306d13a2f..95ceff2f72740eb985a292f4e859fcb7605f7e89 100644 (file)
@@ -100,9 +100,9 @@ let daemonize () =
 
                begin match Unix.fork () with
                | 0 ->
-                       let nullfd = Unix.openfile "/dev/null" [ Unix.O_WRONLY ] 0 in
+                       let nullfd = Unix.openfile "/dev/null" [ Unix.O_RDWR ] 0 in
                        begin try
-                               Unix.close Unix.stdin;
+                               Unix.dup2 nullfd Unix.stdin;
                                Unix.dup2 nullfd Unix.stdout;
                                Unix.dup2 nullfd Unix.stderr;
                        with exn -> Unix.close nullfd; raise exn