xref: /openbmc/linux/arch/powerpc/kernel/audit.c (revision 42f355ef59a2f98fa4affb4265d3ba3e2d86baf1)
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:
50*42f355efSRichard Guy Briggs 		return AUDITSC_OPEN;
5155669bfaSAl Viro 	case __NR_openat:
52*42f355efSRichard Guy Briggs 		return AUDITSC_OPENAT;
5355669bfaSAl Viro 	case __NR_socketcall:
54*42f355efSRichard Guy Briggs 		return AUDITSC_SOCKETCALL;
5555669bfaSAl Viro 	case __NR_execve:
56*42f355efSRichard Guy Briggs 		return AUDITSC_EXECVE;
5755669bfaSAl Viro 	default:
58*42f355efSRichard Guy Briggs 		return AUDITSC_NATIVE;
5955669bfaSAl Viro 	}
6055669bfaSAl Viro }
6155669bfaSAl Viro 
62c0803799SAl Viro static int __init audit_classes_init(void)
63c0803799SAl Viro {
64c0803799SAl Viro #ifdef CONFIG_PPC64
65c0803799SAl Viro 	extern __u32 ppc32_dir_class[];
66dc104fb3SAl Viro 	extern __u32 ppc32_write_class[];
67dc104fb3SAl Viro 	extern __u32 ppc32_read_class[];
68c0803799SAl Viro 	extern __u32 ppc32_chattr_class[];
697f13da40SAmy Griffis 	extern __u32 ppc32_signal_class[];
70dc104fb3SAl Viro 	audit_register_class(AUDIT_CLASS_WRITE_32, ppc32_write_class);
71dc104fb3SAl Viro 	audit_register_class(AUDIT_CLASS_READ_32, ppc32_read_class);
72c0803799SAl Viro 	audit_register_class(AUDIT_CLASS_DIR_WRITE_32, ppc32_dir_class);
73c0803799SAl Viro 	audit_register_class(AUDIT_CLASS_CHATTR_32, ppc32_chattr_class);
747f13da40SAmy Griffis 	audit_register_class(AUDIT_CLASS_SIGNAL_32, ppc32_signal_class);
75c0803799SAl Viro #endif
76dc104fb3SAl Viro 	audit_register_class(AUDIT_CLASS_WRITE, write_class);
77dc104fb3SAl Viro 	audit_register_class(AUDIT_CLASS_READ, read_class);
78c0803799SAl Viro 	audit_register_class(AUDIT_CLASS_DIR_WRITE, dir_class);
79c0803799SAl Viro 	audit_register_class(AUDIT_CLASS_CHATTR, chattr_class);
807f13da40SAmy Griffis 	audit_register_class(AUDIT_CLASS_SIGNAL, signal_class);
81c0803799SAl Viro 	return 0;
82c0803799SAl Viro }
83c0803799SAl Viro 
84c0803799SAl Viro __initcall(audit_classes_init);
85