0001
0002 #include <linux/init.h>
0003 #include <linux/types.h>
0004 #include <linux/audit.h>
0005 #include <asm/unistd.h>
0006 #include <asm/audit.h>
0007
0008 static unsigned dir_class[] = {
0009 #include <asm-generic/audit_dir_write.h>
0010 ~0U
0011 };
0012
0013 static unsigned read_class[] = {
0014 #include <asm-generic/audit_read.h>
0015 ~0U
0016 };
0017
0018 static unsigned write_class[] = {
0019 #include <asm-generic/audit_write.h>
0020 ~0U
0021 };
0022
0023 static unsigned chattr_class[] = {
0024 #include <asm-generic/audit_change_attr.h>
0025 ~0U
0026 };
0027
0028 static unsigned signal_class[] = {
0029 #include <asm-generic/audit_signal.h>
0030 ~0U
0031 };
0032
0033 int audit_classify_arch(int arch)
0034 {
0035 #ifdef CONFIG_IA32_EMULATION
0036 if (arch == AUDIT_ARCH_I386)
0037 return 1;
0038 #endif
0039 return 0;
0040 }
0041
0042 int audit_classify_syscall(int abi, unsigned syscall)
0043 {
0044 #ifdef CONFIG_IA32_EMULATION
0045 if (abi == AUDIT_ARCH_I386)
0046 return ia32_classify_syscall(syscall);
0047 #endif
0048 switch(syscall) {
0049 case __NR_open:
0050 return AUDITSC_OPEN;
0051 case __NR_openat:
0052 return AUDITSC_OPENAT;
0053 case __NR_execve:
0054 case __NR_execveat:
0055 return AUDITSC_EXECVE;
0056 case __NR_openat2:
0057 return AUDITSC_OPENAT2;
0058 default:
0059 return AUDITSC_NATIVE;
0060 }
0061 }
0062
0063 static int __init audit_classes_init(void)
0064 {
0065 #ifdef CONFIG_IA32_EMULATION
0066 extern __u32 ia32_dir_class[];
0067 extern __u32 ia32_write_class[];
0068 extern __u32 ia32_read_class[];
0069 extern __u32 ia32_chattr_class[];
0070 extern __u32 ia32_signal_class[];
0071 audit_register_class(AUDIT_CLASS_WRITE_32, ia32_write_class);
0072 audit_register_class(AUDIT_CLASS_READ_32, ia32_read_class);
0073 audit_register_class(AUDIT_CLASS_DIR_WRITE_32, ia32_dir_class);
0074 audit_register_class(AUDIT_CLASS_CHATTR_32, ia32_chattr_class);
0075 audit_register_class(AUDIT_CLASS_SIGNAL_32, ia32_signal_class);
0076 #endif
0077 audit_register_class(AUDIT_CLASS_WRITE, write_class);
0078 audit_register_class(AUDIT_CLASS_READ, read_class);
0079 audit_register_class(AUDIT_CLASS_DIR_WRITE, dir_class);
0080 audit_register_class(AUDIT_CLASS_CHATTR, chattr_class);
0081 audit_register_class(AUDIT_CLASS_SIGNAL, signal_class);
0082 return 0;
0083 }
0084
0085 __initcall(audit_classes_init);