#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_COMPAT
	extern int s390_classify_syscall(unsigned);
	if (abi == AUDIT_ARCH_S390)
		return s390_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_COMPAT
	extern __u32 s390_dir_class[];
	extern __u32 s390_write_class[];
	extern __u32 s390_read_class[];
	extern __u32 s390_chattr_class[];
	audit_register_class(AUDIT_CLASS_WRITE_32, s390_write_class);
	audit_register_class(AUDIT_CLASS_READ_32, s390_read_class);
	audit_register_class(AUDIT_CLASS_DIR_WRITE_32, s390_dir_class);
	audit_register_class(AUDIT_CLASS_CHATTR_32, s390_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);
