162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci#include <linux/init.h>
362306a36Sopenharmony_ci#include <linux/types.h>
462306a36Sopenharmony_ci#include <linux/audit.h>
562306a36Sopenharmony_ci#include <asm/unistd.h>
662306a36Sopenharmony_ci
762306a36Sopenharmony_cistatic unsigned dir_class[] = {
862306a36Sopenharmony_ci#include <asm-generic/audit_dir_write.h>
962306a36Sopenharmony_ci~0U
1062306a36Sopenharmony_ci};
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cistatic unsigned read_class[] = {
1362306a36Sopenharmony_ci#include <asm-generic/audit_read.h>
1462306a36Sopenharmony_ci~0U
1562306a36Sopenharmony_ci};
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cistatic unsigned write_class[] = {
1862306a36Sopenharmony_ci#include <asm-generic/audit_write.h>
1962306a36Sopenharmony_ci~0U
2062306a36Sopenharmony_ci};
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cistatic unsigned chattr_class[] = {
2362306a36Sopenharmony_ci#include <asm-generic/audit_change_attr.h>
2462306a36Sopenharmony_ci~0U
2562306a36Sopenharmony_ci};
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_cistatic unsigned signal_class[] = {
2862306a36Sopenharmony_ci#include <asm-generic/audit_signal.h>
2962306a36Sopenharmony_ci~0U
3062306a36Sopenharmony_ci};
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ciint audit_classify_arch(int arch)
3362306a36Sopenharmony_ci{
3462306a36Sopenharmony_ci#ifdef CONFIG_COMPAT
3562306a36Sopenharmony_ci	if (arch == AUDIT_ARCH_PARISC)
3662306a36Sopenharmony_ci		return 1;
3762306a36Sopenharmony_ci#endif
3862306a36Sopenharmony_ci	return 0;
3962306a36Sopenharmony_ci}
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ciint audit_classify_syscall(int abi, unsigned syscall)
4262306a36Sopenharmony_ci{
4362306a36Sopenharmony_ci	switch (syscall) {
4462306a36Sopenharmony_ci	case __NR_open:
4562306a36Sopenharmony_ci		return AUDITSC_OPEN;
4662306a36Sopenharmony_ci	case __NR_openat:
4762306a36Sopenharmony_ci		return AUDITSC_OPENAT;
4862306a36Sopenharmony_ci	case __NR_execve:
4962306a36Sopenharmony_ci		return AUDITSC_EXECVE;
5062306a36Sopenharmony_ci	case __NR_openat2:
5162306a36Sopenharmony_ci		return AUDITSC_OPENAT2;
5262306a36Sopenharmony_ci	default:
5362306a36Sopenharmony_ci#ifdef CONFIG_COMPAT
5462306a36Sopenharmony_ci		if (abi == AUDIT_ARCH_PARISC)
5562306a36Sopenharmony_ci			return AUDITSC_COMPAT;
5662306a36Sopenharmony_ci#endif
5762306a36Sopenharmony_ci		return AUDITSC_NATIVE;
5862306a36Sopenharmony_ci	}
5962306a36Sopenharmony_ci}
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_cistatic int __init audit_classes_init(void)
6262306a36Sopenharmony_ci{
6362306a36Sopenharmony_ci#ifdef CONFIG_COMPAT
6462306a36Sopenharmony_ci	extern __u32 parisc32_dir_class[];
6562306a36Sopenharmony_ci	extern __u32 parisc32_write_class[];
6662306a36Sopenharmony_ci	extern __u32 parisc32_read_class[];
6762306a36Sopenharmony_ci	extern __u32 parisc32_chattr_class[];
6862306a36Sopenharmony_ci	extern __u32 parisc32_signal_class[];
6962306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_WRITE_32, parisc32_write_class);
7062306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_READ_32, parisc32_read_class);
7162306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_DIR_WRITE_32, parisc32_dir_class);
7262306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_CHATTR_32, parisc32_chattr_class);
7362306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_SIGNAL_32, parisc32_signal_class);
7462306a36Sopenharmony_ci#endif
7562306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_WRITE, write_class);
7662306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_READ, read_class);
7762306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_DIR_WRITE, dir_class);
7862306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_CHATTR, chattr_class);
7962306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_SIGNAL, signal_class);
8062306a36Sopenharmony_ci	return 0;
8162306a36Sopenharmony_ci}
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci__initcall(audit_classes_init);
84