|
@@ -26,6 +26,7 @@
|
|
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/types.h>
|
|
#include <linux/elf-em.h>
|
|
#include <linux/elf-em.h>
|
|
|
|
+#include <linux/ptrace.h>
|
|
|
|
|
|
/* The netlink messages for the audit system is divided into blocks:
|
|
/* The netlink messages for the audit system is divided into blocks:
|
|
* 1000 - 1099 are for commanding the audit system
|
|
* 1000 - 1099 are for commanding the audit system
|
|
@@ -408,10 +409,6 @@ struct audit_field {
|
|
void *lsm_rule;
|
|
void *lsm_rule;
|
|
};
|
|
};
|
|
|
|
|
|
-#define AUDITSC_INVALID 0
|
|
|
|
-#define AUDITSC_SUCCESS 1
|
|
|
|
-#define AUDITSC_FAILURE 2
|
|
|
|
-#define AUDITSC_RESULT(x) ( ((long)(x))<0?AUDITSC_FAILURE:AUDITSC_SUCCESS )
|
|
|
|
extern int __init audit_register_class(int class, unsigned *list);
|
|
extern int __init audit_register_class(int class, unsigned *list);
|
|
extern int audit_classify_syscall(int abi, unsigned syscall);
|
|
extern int audit_classify_syscall(int abi, unsigned syscall);
|
|
extern int audit_classify_arch(int arch);
|
|
extern int audit_classify_arch(int arch);
|
|
@@ -424,7 +421,7 @@ extern void audit_free(struct task_struct *task);
|
|
extern void audit_syscall_entry(int arch,
|
|
extern void audit_syscall_entry(int arch,
|
|
int major, unsigned long a0, unsigned long a1,
|
|
int major, unsigned long a0, unsigned long a1,
|
|
unsigned long a2, unsigned long a3);
|
|
unsigned long a2, unsigned long a3);
|
|
-extern void audit_syscall_exit(int failed, long return_code);
|
|
|
|
|
|
+extern void __audit_syscall_exit(int ret_success, long ret_value);
|
|
extern void __audit_getname(const char *name);
|
|
extern void __audit_getname(const char *name);
|
|
extern void audit_putname(const char *name);
|
|
extern void audit_putname(const char *name);
|
|
extern void __audit_inode(const char *name, const struct dentry *dentry);
|
|
extern void __audit_inode(const char *name, const struct dentry *dentry);
|
|
@@ -438,6 +435,15 @@ static inline int audit_dummy_context(void)
|
|
void *p = current->audit_context;
|
|
void *p = current->audit_context;
|
|
return !p || *(int *)p;
|
|
return !p || *(int *)p;
|
|
}
|
|
}
|
|
|
|
+static inline void audit_syscall_exit(void *pt_regs)
|
|
|
|
+{
|
|
|
|
+ if (unlikely(current->audit_context)) {
|
|
|
|
+ int success = is_syscall_success(pt_regs);
|
|
|
|
+ int return_code = regs_return_value(pt_regs);
|
|
|
|
+
|
|
|
|
+ __audit_syscall_exit(success, return_code);
|
|
|
|
+ }
|
|
|
|
+}
|
|
static inline void audit_getname(const char *name)
|
|
static inline void audit_getname(const char *name)
|
|
{
|
|
{
|
|
if (unlikely(!audit_dummy_context()))
|
|
if (unlikely(!audit_dummy_context()))
|
|
@@ -551,12 +557,12 @@ static inline void audit_mmap_fd(int fd, int flags)
|
|
|
|
|
|
extern int audit_n_rules;
|
|
extern int audit_n_rules;
|
|
extern int audit_signals;
|
|
extern int audit_signals;
|
|
-#else
|
|
|
|
|
|
+#else /* CONFIG_AUDITSYSCALL */
|
|
#define audit_finish_fork(t)
|
|
#define audit_finish_fork(t)
|
|
#define audit_alloc(t) ({ 0; })
|
|
#define audit_alloc(t) ({ 0; })
|
|
#define audit_free(t) do { ; } while (0)
|
|
#define audit_free(t) do { ; } while (0)
|
|
#define audit_syscall_entry(ta,a,b,c,d,e) do { ; } while (0)
|
|
#define audit_syscall_entry(ta,a,b,c,d,e) do { ; } while (0)
|
|
-#define audit_syscall_exit(f,r) do { ; } while (0)
|
|
|
|
|
|
+#define audit_syscall_exit(r) do { ; } while (0)
|
|
#define audit_dummy_context() 1
|
|
#define audit_dummy_context() 1
|
|
#define audit_getname(n) do { ; } while (0)
|
|
#define audit_getname(n) do { ; } while (0)
|
|
#define audit_putname(n) do { ; } while (0)
|
|
#define audit_putname(n) do { ; } while (0)
|
|
@@ -587,7 +593,7 @@ extern int audit_signals;
|
|
#define audit_ptrace(t) ((void)0)
|
|
#define audit_ptrace(t) ((void)0)
|
|
#define audit_n_rules 0
|
|
#define audit_n_rules 0
|
|
#define audit_signals 0
|
|
#define audit_signals 0
|
|
-#endif
|
|
|
|
|
|
+#endif /* CONFIG_AUDITSYSCALL */
|
|
|
|
|
|
#ifdef CONFIG_AUDIT
|
|
#ifdef CONFIG_AUDIT
|
|
/* These are defined in audit.c */
|
|
/* These are defined in audit.c */
|