Browse Source

Merge branch 'audit.b29' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current

* 'audit.b29' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current:
  [PATCH] sparc64 audit syscall classes hookup
  [PATCH] syscall class hookup for all normal targets
Linus Torvalds 18 years ago
parent
commit
bd314d976e

+ 0 - 1
arch/i386/kernel/Makefile

@@ -39,7 +39,6 @@ obj-$(CONFIG_VM86)		+= vm86.o
 obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
 obj-$(CONFIG_HPET_TIMER) 	+= hpet.o
 obj-$(CONFIG_K8_NB)		+= k8.o
-obj-$(CONFIG_AUDIT)		+= audit.o
 
 EXTRA_AFLAGS   := -traditional
 

+ 4 - 0
arch/ia64/Kconfig

@@ -75,6 +75,10 @@ config DMA_IS_NORMAL
 	depends on IA64_SGI_SN2
 	default y
 
+config AUDIT_ARCH
+	bool
+	default y
+
 choice
 	prompt "System type"
 	default IA64_GENERIC

+ 4 - 0
arch/powerpc/Kconfig

@@ -95,6 +95,10 @@ config GENERIC_TBSYNC
 	default y if PPC32 && SMP
 	default n
 
+config AUDIT_ARCH
+	bool
+	default y
+
 config DEFAULT_UIMAGE
 	bool
 	help

+ 4 - 0
arch/s390/Kconfig

@@ -118,6 +118,10 @@ config SYSVIPC_COMPAT
 	depends on COMPAT && SYSVIPC
 	default y
 
+config AUDIT_ARCH
+	bool
+	default y
+
 comment "Code generation options"
 
 choice

+ 4 - 0
arch/sparc64/Kconfig

@@ -34,6 +34,10 @@ config ARCH_MAY_HAVE_PC_FDC
 	bool
 	default y
 
+config AUDIT_ARCH
+	bool
+	default y
+
 choice
 	prompt "Kernel page size"
 	default SPARC64_PAGE_SIZE_8KB

+ 3 - 0
arch/sparc64/kernel/Makefile

@@ -25,6 +25,9 @@ obj-$(CONFIG_MODULES) += module.o
 obj-$(CONFIG_US3_FREQ) += us3_cpufreq.o
 obj-$(CONFIG_US2E_FREQ) += us2e_cpufreq.o
 obj-$(CONFIG_KPROBES) += kprobes.o
+obj-$(CONFIG_AUDIT) += audit.o
+obj-$(CONFIG_AUDIT)$(CONFIG_SPARC32_COMPAT) += compat_audit.o
+obj-y += $(obj-yy)
 
 ifdef CONFIG_SUNOS_EMUL
   obj-y += sys_sunos32.o sunos_ioctl32.o

+ 66 - 0
arch/sparc64/kernel/audit.c

@@ -0,0 +1,66 @@
+#include <linux/init.h>
+#include <linux/types.h>
+#include <linux/audit.h>
+#include <asm/unistd.h>
+
+static unsigned dir_class[] = {
+#include <asm-generic/audit_dir_write.h>
+~0U
+};
+
+static unsigned read_class[] = {
+#include <asm-generic/audit_read.h>
+~0U
+};
+
+static unsigned write_class[] = {
+#include <asm-generic/audit_write.h>
+~0U
+};
+
+static unsigned chattr_class[] = {
+#include <asm-generic/audit_change_attr.h>
+~0U
+};
+
+int audit_classify_syscall(int abi, unsigned syscall)
+{
+#ifdef CONFIG_SPARC32_COMPAT
+	extern int sparc32_classify_syscall(unsigned);
+	if (abi == AUDIT_ARCH_SPARC)
+		return sparc32_classify_syscall(syscall);
+#endif
+	switch(syscall) {
+	case __NR_open:
+		return 2;
+	case __NR_openat:
+		return 3;
+	case __NR_socketcall:
+		return 4;
+	case __NR_execve:
+		return 5;
+	default:
+		return 0;
+	}
+}
+
+static int __init audit_classes_init(void)
+{
+#ifdef CONFIG_SPARC32_COMPAT
+	extern __u32 sparc32_dir_class[];
+	extern __u32 sparc32_write_class[];
+	extern __u32 sparc32_read_class[];
+	extern __u32 sparc32_chattr_class[];
+	audit_register_class(AUDIT_CLASS_WRITE_32, sparc32_write_class);
+	audit_register_class(AUDIT_CLASS_READ_32, sparc32_read_class);
+	audit_register_class(AUDIT_CLASS_DIR_WRITE_32, sparc32_dir_class);
+	audit_register_class(AUDIT_CLASS_CHATTR_32, sparc32_chattr_class);
+#endif
+	audit_register_class(AUDIT_CLASS_WRITE, write_class);
+	audit_register_class(AUDIT_CLASS_READ, read_class);
+	audit_register_class(AUDIT_CLASS_DIR_WRITE, dir_class);
+	audit_register_class(AUDIT_CLASS_CHATTR, chattr_class);
+	return 0;
+}
+
+__initcall(audit_classes_init);

+ 37 - 0
arch/sparc64/kernel/compat_audit.c

@@ -0,0 +1,37 @@
+#include <asm-sparc/unistd.h>
+
+unsigned sparc32_dir_class[] = {
+#include <asm-generic/audit_dir_write.h>
+~0U
+};
+
+unsigned sparc32_chattr_class[] = {
+#include <asm-generic/audit_change_attr.h>
+~0U
+};
+
+unsigned sparc32_write_class[] = {
+#include <asm-generic/audit_write.h>
+~0U
+};
+
+unsigned sparc32_read_class[] = {
+#include <asm-generic/audit_read.h>
+~0U
+};
+
+int sparc32_classify_syscall(unsigned syscall)
+{
+	switch(syscall) {
+	case __NR_open:
+		return 2;
+	case __NR_openat:
+		return 3;
+	case __NR_socketcall:
+		return 4;
+	case __NR_execve:
+		return 5;
+	default:
+		return 1;
+	}
+}

+ 4 - 0
arch/x86_64/Kconfig

@@ -85,6 +85,10 @@ config DMI
 	bool
 	default y
 
+config AUDIT_ARCH
+	bool
+	default y
+
 source "init/Kconfig"
 
 

+ 5 - 0
lib/Kconfig

@@ -38,6 +38,11 @@ config LIBCRC32C
 	  require M here.  See Castagnoli93.
 	  Module will be libcrc32c.
 
+config AUDIT_GENERIC
+	bool
+	depends on AUDIT && !AUDIT_ARCH
+	default y
+
 #
 # compression support is select'ed if needed
 #

+ 1 - 0
lib/Makefile

@@ -49,6 +49,7 @@ obj-$(CONFIG_TEXTSEARCH_KMP) += ts_kmp.o
 obj-$(CONFIG_TEXTSEARCH_BM) += ts_bm.o
 obj-$(CONFIG_TEXTSEARCH_FSM) += ts_fsm.o
 obj-$(CONFIG_SMP) += percpu_counter.o
+obj-$(CONFIG_AUDIT_GENERIC) += audit.o
 
 obj-$(CONFIG_SWIOTLB) += swiotlb.o
 

+ 2 - 0
arch/i386/kernel/audit.c → lib/audit.c

@@ -30,8 +30,10 @@ int audit_classify_syscall(int abi, unsigned syscall)
 		return 2;
 	case __NR_openat:
 		return 3;
+#ifdef __NR_socketcall
 	case __NR_socketcall:
 		return 4;
+#endif
 	case __NR_execve:
 		return 5;
 	default: