lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20070321222236.GB22623@uranus.ravnborg.org>
Date:	Wed, 21 Mar 2007 23:22:36 +0100
From:	Sam Ravnborg <sam@...nborg.org>
To:	Andrew Morton <akpm@...ux-foundation.org>
Cc:	Kees Cook <kees@...flux.net>,
	Randy Dunlap <randy.dunlap@...cle.com>,
	linux-kernel@...r.kernel.org, David Woodhouse <dwmw2@...radead.org>
Subject: [PATCH 1/3] kbuild: complain about missing system calls.

>From 5fbf06eb42fdaf81529d2433fe0953297cbc7cc6 Mon Sep 17 00:00:00 2001
From: David Woodhouse <dwmw2@...radead.org>
Date: Thu, 8 Mar 2007 23:01:13 +0000
Subject: [PATCH] kbuild: complain about missing system calls.
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Most system calls seem to get added to i386 first. This patch
automatically generates a warning for any new system call which is
implemented on i386 but not the architecture currently being compiled.
On PowerPC at the moment, for example, it results in these warnings:
init/missing_syscalls.h:935:3: warning: #warning syscall sync_file_range not implemented
init/missing_syscalls.h:947:3: warning: #warning syscall getcpu not implemented
init/missing_syscalls.h:950:3: warning: #warning syscall epoll_pwait not implemented

Other contributors to this patch are Russell King <rmk+lkml@....linux.org.uk>
and Stéphane Jourdois <kwisatz@...is.org>

Signed-off-by: David Woodhouse <dwmw2@...radead.org>
Signed-off-by: Sam Ravnborg <sam@...nborg.org>
---
 init/Makefile           |   12 +++++++++-
 init/missing_syscalls.c |   57 +++++++++++++++++++++++++++++++++++++++++++++++
 scripts/syscallchk      |    6 +++++
 3 files changed, 74 insertions(+), 1 deletions(-)

diff --git a/init/Makefile b/init/Makefile
index 0154aea..af9f529 100644
--- a/init/Makefile
+++ b/init/Makefile
@@ -2,7 +2,7 @@
 # Makefile for the linux kernel.
 #
 
-obj-y                          := main.o version.o mounts.o
+obj-y                          := main.o version.o mounts.o missing_syscalls.o
 ifneq ($(CONFIG_BLK_DEV_INITRD),y)
 obj-y                          += noinitramfs.o
 else
@@ -21,6 +21,7 @@ clean-files := ../include/linux/compile.h
 # dependencies on generated files need to be listed explicitly
 
 $(obj)/version.o: include/linux/compile.h
+$(obj)/missing_syscalls.o: $(obj)/missing_syscalls.h
 
 # compile.h changes depending on hostname, generation number, etc,
 # so we regenerate it always.
@@ -31,3 +32,12 @@ include/linux/compile.h: FORCE
 	@echo '  CHK     $@'
 	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ \
 	"$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)" "$(CC) $(CFLAGS)"
+
+
+quiet_cmd_missing_syscalls = GEN     $@
+      cmd_missing_syscalls = sed -n -f $(srctree)/scripts/syscallchk $< > $@
+
+targets += missing_syscalls.h
+$(obj)/missing_syscalls.h: include/asm-i386/unistd.h \
+                           $(srctree)/scripts/syscallchk $(src)/Makefile
+	$(call if_changed,missing_syscalls)
diff --git a/init/missing_syscalls.c b/init/missing_syscalls.c
new file mode 100644
index 0000000..e802b06
--- /dev/null
+++ b/init/missing_syscalls.c
@@ -0,0 +1,57 @@
+#include <asm/types.h>
+#include <asm/unistd.h>
+
+/* Force recompilation (and thus warnings) every time we rebuild the kernel */
+#include <linux/compile.h>
+
+/* System calls for 32-bit kernels only */
+#if BITS_PER_LONG == 64
+#define __IGNORE_sendfile64
+#define __IGNORE_ftruncate64
+#define __IGNORE_truncate64
+#define __IGNORE_stat64
+#define __IGNORE_lstat64
+#define __IGNORE_fstat64
+#define __IGNORE_fcntl64
+#define __IGNORE_fadvise64_64
+#define __IGNORE_fstatat64
+#endif
+
+/* i386-specific or historical system calls */
+#define __IGNORE_mmap2
+#define __IGNORE_vm86
+#define __IGNORE_vm86old
+#define __IGNORE_set_thread_area
+#define __IGNORE_get_thread_area
+#define __IGNORE_madvise1
+#define __IGNORE_oldstat
+#define __IGNORE_oldfstat
+#define __IGNORE_oldlstat
+#define __IGNORE_oldolduname
+#define __IGNORE_olduname
+#define __IGNORE_umount2
+/* ... including the "new" 32-bit uid syscalls */
+#define __IGNORE_lchown32
+#define __IGNORE_getuid32
+#define __IGNORE_getgid32
+#define __IGNORE_geteuid32
+#define __IGNORE_getegid32
+#define __IGNORE_setreuid32
+#define __IGNORE_setregid32
+#define __IGNORE_getgroups32
+#define __IGNORE_setgroups32
+#define __IGNORE_fchown32
+#define __IGNORE_setresuid32
+#define __IGNORE_getresuid32
+#define __IGNORE_setresgid32
+#define __IGNORE_getresgid32
+#define __IGNORE_chown32
+#define __IGNORE_setuid32
+#define __IGNORE_setgid32
+#define __IGNORE_setfsuid32
+#define __IGNORE_setfsgid32
+
+/* Not yet upstream */
+#define __IGNORE_vserver
+
+#include "missing_syscalls.h"
diff --git a/scripts/syscallchk b/scripts/syscallchk
new file mode 100644
index 0000000..d545717
--- /dev/null
+++ b/scripts/syscallchk
@@ -0,0 +1,6 @@
+/^\#define/ {
+	s/[^_]*__NR_\([^[:space:]]*\).*/\
+\#if !defined (__NR_\1) \&\& !defined (__IGNORE_\1)\
+\#warning syscall \1 not implemented\
+\#endif/p
+}
-- 
1.4.4.2

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ