Create tty at chroot.
authorThadeu Lima de Souza Cascardo <cascardo@cascardo.eti.br>
Thu, 20 Oct 2016 10:22:21 +0000 (10:22 +0000)
committerThadeu Lima de Souza Cascardo <cascardo@cascardo.eti.br>
Thu, 20 Oct 2016 10:22:21 +0000 (10:22 +0000)
After doing chroot, create pts mount points and ttyGS0.

Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@cascardo.eti.br>
init.c
init.h
main.c

diff --git a/init.c b/init.c
index 0a9948a..1cef827 100644 (file)
--- a/init.c
+++ b/init.c
 
 int devmount_setup(void)
 {
 
 int devmount_setup(void)
 {
+       int r;
        mkdir("/dev", 0755);
        mkdir("/dev", 0755);
-       return mount(NULL, "/dev", "devtmpfs", MS_NOEXEC | MS_NOSUID | MS_NOATIME, NULL);
+       r = mount(NULL, "/dev", "devtmpfs", MS_NOEXEC | MS_NOSUID | MS_NOATIME, NULL);
+       if (r < 0)
+               r = mount(NULL, "/dev", "tmpfs", MS_NOEXEC | MS_NOSUID | MS_NOATIME, NULL);
+       return r;
+}
+
+int devpts_setup(void)
+{
+       mkdir("/dev/pts", 0755);
+       return mount(NULL, "/dev/pts", "devpts", MS_NOEXEC | MS_NOSUID | MS_NOATIME, NULL);
 }
 
 int sysfsmount_setup(void)
 }
 
 int sysfsmount_setup(void)
diff --git a/init.h b/init.h
index 90d9ba9..4f83fad 100644 (file)
--- a/init.h
+++ b/init.h
@@ -19,6 +19,7 @@
 #define _INIT_H
 
 int devmount_setup(void);
 #define _INIT_H
 
 int devmount_setup(void);
+int devpts_setup(void);
 int sysfsmount_setup(void);
 
 #endif
 int sysfsmount_setup(void);
 
 #endif
diff --git a/main.c b/main.c
index daea84c..26b4274 100644 (file)
--- a/main.c
+++ b/main.c
@@ -145,6 +145,10 @@ int main(int argc, char **argv)
        if (r) printf("failed chroot\n");
        r = chdir("/");
        if (r) printf("failed second chdir\n");
        if (r) printf("failed chroot\n");
        r = chdir("/");
        if (r) printf("failed second chdir\n");
+       sysfsmount_setup();
+       devmount_setup();
+       devpts_setup();
+       do_mknod("/sys/class/tty", "ttyGS0", 0, 1);
        execve("/bin/bash", args, NULL);
        return 0;
 }
        execve("/bin/bash", args, NULL);
        return 0;
 }