summaryrefslogtreecommitdiffstats
path: root/main/xen/musl-support.patch
blob: 8236a927d0d44742e280bdf9fedb661efd0a899b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
--- xen-4.3.1.orig/m4/ptyfuncs.m4
+++ xen-4.3.1/m4/ptyfuncs.m4
@@ -10,7 +10,7 @@
     ])
     AX_SAVEVAR_RESTORE(CPPFLAGS)
     AC_CACHE_CHECK([for openpty et al], [ax_cv_ptyfuncs_libs], [
-        for ax_cv_ptyfuncs_libs in -lutil "" NOT_FOUND; do
+        for ax_cv_ptyfuncs_libs in -lc -lutil "" NOT_FOUND; do
             if test "x$ax_cv_ptyfuncs_libs" = "xNOT_FOUND"; then
                 AC_MSG_FAILURE([Unable to find library for openpty and login_tty])
             fi
--- xen-4.3.1.orig/m4/ptyfuncs.m4
+++ xen-4.3.1/m4/ptyfuncs.m4
@@ -22,7 +22,6 @@
 #endif
 int main(void) {
   openpty(0,0,0,0,0);
-  login_tty(0);
 }
 ])],[
                 break
--- xen-4.3.1.orig/tools/libxl/libxl_bootloader.c
+++ xen-4.3.1/tools/libxl/libxl_bootloader.c
@@ -85,6 +85,21 @@
 
 /*----- synchronous subroutines -----*/
 
+static int setup_console_tty(int fd)
+{
+	(void) setsid();
+#ifdef TIOCSCTTY
+	if (ioctl(fd, TIOCSCTTY, (char *)NULL) == -1)
+		return (-1);
+#endif
+	(void) dup2(fd, 0);
+	(void) dup2(fd, 1);
+	(void) dup2(fd, 2);
+	if (fd > 2)
+		(void) close(fd);
+	return (0);
+}
+
 static int setup_xenconsoled_pty(libxl__egc *egc, libxl__bootloader_state *bl,
                                  char *slave_path, size_t slave_path_len)
 {
@@ -548,7 +563,7 @@
 
     if (!pid) {
         /* child */
-        r = login_tty(libxl__carefd_fd(bl->ptys[0].slave));
+        r = setup_console_tty(libxl__carefd_fd(bl->ptys[0].slave));
         if (r) { LOGE(ERROR, "login_tty failed"); exit(-1); }
         libxl__exec(gc, -1, -1, -1, bl->args[0], (char **) bl->args, env);
         exit(-1);