diff mbox

[OpenWrt-Devel] explicitely ignore return value of symlink(3) call

Message ID 20151022211553.GA9467@makrotopia.org
State Accepted
Headers show

Commit Message

Daniel Golle Oct. 22, 2015, 9:15 p.m. UTC
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

Comments

Felix Fietkau Oct. 28, 2015, 12:05 p.m. UTC | #1
On 2015-10-22 23:15, Daniel Golle wrote:
> 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>
> --- /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
This libc detection hackery looks completely useless to me.
Why did you add it?

- Felix
diff mbox

Patch

diff --git a/initd/early.c b/initd/early.c
index f410256..d3d091b 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/plug/coldplug.c b/plug/coldplug.c
index 123e17d..799c658 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);
diff --git a/libc-compat.h b/libc-compat.h
new file mode 100644
index 0000000..5a104de
--- /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