diff options
author | Daniel Golle <daniel@makrotopia.org> | 2015-10-22 23:15:58 +0200 |
---|---|---|
committer | John Crispin <blogic@openwrt.org> | 2015-10-26 00:11:04 +0100 |
commit | d5fddd91b966424bb63e943e789704d52382cc18 (patch) | |
tree | 931b814ec39fbb29d1a7577843f516eb9035f438 | |
parent | ef490722885a5c708c70dff656d094c7043ae081 (diff) | |
download | unitd-d5fddd91b966424bb63e943e789704d52382cc18.tar unitd-d5fddd91b966424bb63e943e789704d52382cc18.zip |
explicitely ignore return value of symlink(3) call
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>
-rw-r--r-- | initd/early.c | 3 | ||||
-rw-r--r-- | libc-compat.h | 10 | ||||
-rw-r--r-- | plug/coldplug.c | 3 |
3 files changed, 14 insertions, 2 deletions
diff --git a/initd/early.c b/initd/early.c index f410256..e87774f 100644 --- a/initd/early.c +++ b/initd/early.c @@ -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(); diff --git a/libc-compat.h b/libc-compat.h new file mode 100644 index 0000000..9435346 --- /dev/null +++ b/libc-compat.h @@ -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 diff --git a/plug/coldplug.c b/plug/coldplug.c index 123e17d..5fcb9a3 100644 --- a/plug/coldplug.c +++ b/plug/coldplug.c @@ -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); |