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	if (audit_is_compat(arch))
3562306a36Sopenharmony_ci		return 1;
3662306a36Sopenharmony_ci	else
3762306a36Sopenharmony_ci		return 0;
3862306a36Sopenharmony_ci}
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ciint audit_classify_syscall(int abi, unsigned syscall)
4162306a36Sopenharmony_ci{
4262306a36Sopenharmony_ci	if (audit_is_compat(abi))
4362306a36Sopenharmony_ci		return audit_classify_compat_syscall(abi, syscall);
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci	switch(syscall) {
4662306a36Sopenharmony_ci#ifdef __NR_open
4762306a36Sopenharmony_ci	case __NR_open:
4862306a36Sopenharmony_ci		return AUDITSC_OPEN;
4962306a36Sopenharmony_ci#endif
5062306a36Sopenharmony_ci#ifdef __NR_openat
5162306a36Sopenharmony_ci	case __NR_openat:
5262306a36Sopenharmony_ci		return AUDITSC_OPENAT;
5362306a36Sopenharmony_ci#endif
5462306a36Sopenharmony_ci#ifdef __NR_socketcall
5562306a36Sopenharmony_ci	case __NR_socketcall:
5662306a36Sopenharmony_ci		return AUDITSC_SOCKETCALL;
5762306a36Sopenharmony_ci#endif
5862306a36Sopenharmony_ci#ifdef __NR_execveat
5962306a36Sopenharmony_ci	case __NR_execveat:
6062306a36Sopenharmony_ci#endif
6162306a36Sopenharmony_ci	case __NR_execve:
6262306a36Sopenharmony_ci		return AUDITSC_EXECVE;
6362306a36Sopenharmony_ci#ifdef __NR_openat2
6462306a36Sopenharmony_ci	case __NR_openat2:
6562306a36Sopenharmony_ci		return AUDITSC_OPENAT2;
6662306a36Sopenharmony_ci#endif
6762306a36Sopenharmony_ci	default:
6862306a36Sopenharmony_ci		return AUDITSC_NATIVE;
6962306a36Sopenharmony_ci	}
7062306a36Sopenharmony_ci}
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_cistatic int __init audit_classes_init(void)
7362306a36Sopenharmony_ci{
7462306a36Sopenharmony_ci#ifdef CONFIG_AUDIT_COMPAT_GENERIC
7562306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_WRITE_32, compat_write_class);
7662306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_READ_32, compat_read_class);
7762306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_DIR_WRITE_32, compat_dir_class);
7862306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_CHATTR_32, compat_chattr_class);
7962306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_SIGNAL_32, compat_signal_class);
8062306a36Sopenharmony_ci#endif
8162306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_WRITE, write_class);
8262306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_READ, read_class);
8362306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_DIR_WRITE, dir_class);
8462306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_CHATTR, chattr_class);
8562306a36Sopenharmony_ci	audit_register_class(AUDIT_CLASS_SIGNAL, signal_class);
8662306a36Sopenharmony_ci	return 0;
8762306a36Sopenharmony_ci}
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci__initcall(audit_classes_init);
90