chiark / gitweb /
nspawn: make /dev/kmsg unavailable in the container, but allow access to /proc/kmsg
authorLennart Poettering <lennart@poettering.net>
Sat, 21 Apr 2012 22:32:13 +0000 (00:32 +0200)
committerLennart Poettering <lennart@poettering.net>
Sat, 21 Apr 2012 22:32:53 +0000 (00:32 +0200)
Makefile.am
src/nspawn/nspawn.c

index a2087820e7584bb05b4ffd4a573c2a84617851f8..22a04d4a1bafc3e1abfda0c80f6e2c54006d8d4b 100644 (file)
@@ -3123,7 +3123,6 @@ systemd-install-data-hook:
                $(LN_S) ../system-services/org.freedesktop.systemd1.service org.freedesktop.systemd1.service )
 if HAVE_PLYMOUTH
        $(MKDIR_P) -m 0755 \
                $(LN_S) ../system-services/org.freedesktop.systemd1.service org.freedesktop.systemd1.service )
 if HAVE_PLYMOUTH
        $(MKDIR_P) -m 0755 \
-               $(DESTDIR)$(SYSTEM_SYSVINIT_PATH) \
                $(DESTDIR)$(systemunitdir)/reboot.target.wants \
                $(DESTDIR)$(systemunitdir)/kexec.target.wants \
                $(DESTDIR)$(systemunitdir)/poweroff.target.wants \
                $(DESTDIR)$(systemunitdir)/reboot.target.wants \
                $(DESTDIR)$(systemunitdir)/kexec.target.wants \
                $(DESTDIR)$(systemunitdir)/poweroff.target.wants \
index 90c8b94248b406c3baefca74fd272e2a6c609462..71cdd3f39f27e23ab248dc84058ccf437f2f7399 100644 (file)
@@ -394,6 +394,13 @@ static int setup_kmsg(const char *dest, int kmsg_socket) {
 
         u = umask(0000);
 
 
         u = umask(0000);
 
+        /* We create the kmsg FIFO as /dev/kmsg, but immediately
+         * delete it after bind mounting it to /proc/kmsg. While FIFOs
+         * on the reading side behave very similar to /proc/kmsg,
+         * their writing side behaves differently from /dev/kmsg in
+         * that writing blocks when nothing is reading. In order to
+         * avoid any problems with containers deadlocking due to this
+         * we simply make /dev/kmsg unavailable to the container. */
         if (asprintf(&from, "%s/dev/kmsg", dest) < 0) {
                 log_error("Out of memory");
                 r = -ENOMEM;
         if (asprintf(&from, "%s/dev/kmsg", dest) < 0) {
                 log_error("Out of memory");
                 r = -ENOMEM;
@@ -456,6 +463,9 @@ static int setup_kmsg(const char *dest, int kmsg_socket) {
                 goto finish;
         }
 
                 goto finish;
         }
 
+        /* And now make the FIFO unavailable as /dev/kmsg... */
+        unlink(from);
+
 finish:
         free(from);
         free(to);
 finish:
         free(from);
         free(to);