xref: /openbmc/linux/arch/powerpc/kernel/audit.c (revision 1c30e3af8a79260cdba833a719209b01e6b92300)
1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
2c0803799SAl Viro #include <linux/init.h>
3c0803799SAl Viro #include <linux/types.h>
4c0803799SAl Viro #include <linux/audit.h>
5c0803799SAl Viro #include <asm/unistd.h>
6c0803799SAl Viro 
7c0803799SAl Viro static unsigned dir_class[] = {
8c0803799SAl Viro #include <asm-generic/audit_dir_write.h>
9c0803799SAl Viro ~0U
10c0803799SAl Viro };
11c0803799SAl Viro 
12dc104fb3SAl Viro static unsigned read_class[] = {
13dc104fb3SAl Viro #include <asm-generic/audit_read.h>
14dc104fb3SAl Viro ~0U
15dc104fb3SAl Viro };
16dc104fb3SAl Viro 
17dc104fb3SAl Viro static unsigned write_class[] = {
18dc104fb3SAl Viro #include <asm-generic/audit_write.h>
19dc104fb3SAl Viro ~0U
20dc104fb3SAl Viro };
21dc104fb3SAl Viro 
22c0803799SAl Viro static unsigned chattr_class[] = {
23c0803799SAl Viro #include <asm-generic/audit_change_attr.h>
24c0803799SAl Viro ~0U
25c0803799SAl Viro };
26c0803799SAl Viro 
277f13da40SAmy Griffis static unsigned signal_class[] = {
287f13da40SAmy Griffis #include <asm-generic/audit_signal.h>
297f13da40SAmy Griffis ~0U
307f13da40SAmy Griffis };
317f13da40SAmy Griffis 
32e54dc243SAmy Griffis int audit_classify_arch(int arch)
33e54dc243SAmy Griffis {
34e54dc243SAmy Griffis #ifdef CONFIG_PPC64
35e54dc243SAmy Griffis 	if (arch == AUDIT_ARCH_PPC)
36e54dc243SAmy Griffis 		return 1;
37e54dc243SAmy Griffis #endif
38e54dc243SAmy Griffis 	return 0;
39e54dc243SAmy Griffis }
40e54dc243SAmy Griffis 
4155669bfaSAl Viro int audit_classify_syscall(int abi, unsigned syscall)
4255669bfaSAl Viro {
4355669bfaSAl Viro #ifdef CONFIG_PPC64
4455669bfaSAl Viro 	extern int ppc32_classify_syscall(unsigned);
4555669bfaSAl Viro 	if (abi == AUDIT_ARCH_PPC)
4655669bfaSAl Viro 		return ppc32_classify_syscall(syscall);
4755669bfaSAl Viro #endif
4855669bfaSAl Viro 	switch(syscall) {
4955669bfaSAl Viro 	case __NR_open:
5042f355efSRichard Guy Briggs 		return AUDITSC_OPEN;
5155669bfaSAl Viro 	case __NR_openat:
5242f355efSRichard Guy Briggs 		return AUDITSC_OPENAT;
5355669bfaSAl Viro 	case __NR_socketcall:
5442f355efSRichard Guy Briggs 		return AUDITSC_SOCKETCALL;
5555669bfaSAl Viro 	case __NR_execve:
5642f355efSRichard Guy Briggs 		return AUDITSC_EXECVE;
57*1c30e3afSRichard Guy Briggs 	case __NR_openat2:
58*1c30e3afSRichard Guy Briggs 		return AUDITSC_OPENAT2;
5955669bfaSAl Viro 	default:
6042f355efSRichard Guy Briggs 		return AUDITSC_NATIVE;
6155669bfaSAl Viro 	}
6255669bfaSAl Viro }
6355669bfaSAl Viro 
64c0803799SAl Viro static int __init audit_classes_init(void)
65c0803799SAl Viro {
66c0803799SAl Viro #ifdef CONFIG_PPC64
67c0803799SAl Viro 	extern __u32 ppc32_dir_class[];
68dc104fb3SAl Viro 	extern __u32 ppc32_write_class[];
69dc104fb3SAl Viro 	extern __u32 ppc32_read_class[];
70c0803799SAl Viro 	extern __u32 ppc32_chattr_class[];
717f13da40SAmy Griffis 	extern __u32 ppc32_signal_class[];
72dc104fb3SAl Viro 	audit_register_class(AUDIT_CLASS_WRITE_32, ppc32_write_class);
73dc104fb3SAl Viro 	audit_register_class(AUDIT_CLASS_READ_32, ppc32_read_class);
74c0803799SAl Viro 	audit_register_class(AUDIT_CLASS_DIR_WRITE_32, ppc32_dir_class);
75c0803799SAl Viro 	audit_register_class(AUDIT_CLASS_CHATTR_32, ppc32_chattr_class);
767f13da40SAmy Griffis 	audit_register_class(AUDIT_CLASS_SIGNAL_32, ppc32_signal_class);
77c0803799SAl Viro #endif
78dc104fb3SAl Viro 	audit_register_class(AUDIT_CLASS_WRITE, write_class);
79dc104fb3SAl Viro 	audit_register_class(AUDIT_CLASS_READ, read_class);
80c0803799SAl Viro 	audit_register_class(AUDIT_CLASS_DIR_WRITE, dir_class);
81c0803799SAl Viro 	audit_register_class(AUDIT_CLASS_CHATTR, chattr_class);
827f13da40SAmy Griffis 	audit_register_class(AUDIT_CLASS_SIGNAL, signal_class);
83c0803799SAl Viro 	return 0;
84c0803799SAl Viro }
85c0803799SAl Viro 
86c0803799SAl Viro __initcall(audit_classes_init);
87