@@ -22,6 +22,7 @@
#include <stdlib.h>
#include "init.h"
+#include "../libc-compat.h"
static void
early_dev(void)
@@ -66,7 +67,7 @@ early_mounts(void)
mount("sysfs", "/sys", "sysfs", MS_NOATIME | MS_NODEV | MS_NOEXEC | MS_NOSUID, 0);
mount("cgroup", "/sys/fs/cgroup", "cgroup", MS_NODEV | MS_NOEXEC | MS_NOSUID, 0);
mount("tmpfs", "/dev", "tmpfs", MS_NOATIME | MS_NOSUID, "mode=0755,size=512K");
- symlink("/tmp/shm", "/dev/shm");
+ ignore(symlink("/tmp/shm", "/dev/shm"));
mkdir("/dev/pts", 0755);
mount("devpts", "/dev/pts", "devpts", MS_NOATIME | MS_NOEXEC | MS_NOSUID, "mode=600");
early_dev();
@@ -19,6 +19,7 @@
#include <unistd.h>
#include "../procd.h"
+#include "../libc-compat.h"
#include "hotplug.h"
@@ -45,7 +46,7 @@ void procd_coldplug(void)
umount2("/dev/pts", MNT_DETACH);
umount2("/dev/", MNT_DETACH);
mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755,size=512K");
- symlink("/tmp/shm", "/dev/shm");
+ ignore(symlink("/tmp/shm", "/dev/shm"));
mkdir("/dev/pts", 0755);
umask(oldumask);
mount("devpts", "/dev/pts", "devpts", MS_NOEXEC | MS_NOSUID, 0);
new file mode 100644
@@ -0,0 +1,10 @@
+#ifndef __PROCD_LIBC_COMPAT_H
+#define __PROCD_LIBC_COMPAT_H
+
+#if defined(__GLIBC__) && !defined(__UCLIBC__)
+static inline int ignore(int x) {return x;}
+#else
+#define ignore(x) x
+#endif
+
+#endif
glibc sets __attribute_warn_unused_result__ on symlink(3) if FORTIFY_SOURCE is set. This breaks procd which deliberately ignores the result of the symlink(3) call early during init as there wouldn't be anything better to do in that case other than ignoring the error and trying to survive. Introduce libc-compat.h to work-around libc anomalities. Signed-off-by: Daniel Golle <daniel@makrotopia.org> --- initd/early.c | 3 ++- plug/coldplug.c | 3 ++- libc-compat.h | 10 ++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 libc-compat.h