mirror of
https://github.com/armbian/linux-cix.git
synced 2026-01-06 12:30:45 -08:00
Merge git://git.infradead.org/users/eparis/audit
Pull audit updates from Eric Paris. * git://git.infradead.org/users/eparis/audit: (28 commits) AUDIT: make audit_is_compat depend on CONFIG_AUDIT_COMPAT_GENERIC audit: renumber AUDIT_FEATURE_CHANGE into the 1300 range audit: do not cast audit_rule_data pointers pointlesly AUDIT: Allow login in non-init namespaces audit: define audit_is_compat in kernel internal header kernel: Use RCU_INIT_POINTER(x, NULL) in audit.c sched: declare pid_alive as inline audit: use uapi/linux/audit.h for AUDIT_ARCH declarations syscall_get_arch: remove useless function arguments audit: remove stray newline from audit_log_execve_info() audit_panic() call audit: remove stray newlines from audit_log_lost messages audit: include subject in login records audit: remove superfluous new- prefix in AUDIT_LOGIN messages audit: allow user processes to log from another PID namespace audit: anchor all pid references in the initial pid namespace audit: convert PPIDs to the inital PID namespace. pid: get pid_t ppid of task in init_pid_ns audit: rename the misleading audit_get_context() to audit_take_context() audit: Add generic compat syscall support audit: Add CONFIG_HAVE_ARCH_AUDITSYSCALL ...
This commit is contained in:
@@ -22,6 +22,7 @@ config ALPHA
|
||||
select GENERIC_SMP_IDLE_THREAD
|
||||
select GENERIC_STRNCPY_FROM_USER
|
||||
select GENERIC_STRNLEN_USER
|
||||
select HAVE_ARCH_AUDITSYSCALL
|
||||
select HAVE_MOD_ARCH_SPECIFIC
|
||||
select MODULES_USE_ELF_RELA
|
||||
select ODD_RT_SIGACTION
|
||||
|
||||
@@ -24,6 +24,7 @@ config ARM
|
||||
select GENERIC_STRNCPY_FROM_USER
|
||||
select GENERIC_STRNLEN_USER
|
||||
select HARDIRQS_SW_RESEND
|
||||
select HAVE_ARCH_AUDITSYSCALL if (AEABI && !OABI_COMPAT)
|
||||
select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL
|
||||
select HAVE_ARCH_KGDB
|
||||
select HAVE_ARCH_SECCOMP_FILTER if (AEABI && !OABI_COMPAT)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
#ifndef _ASM_ARM_SYSCALL_H
|
||||
#define _ASM_ARM_SYSCALL_H
|
||||
|
||||
#include <linux/audit.h> /* for AUDIT_ARCH_* */
|
||||
#include <uapi/linux/audit.h> /* for AUDIT_ARCH_* */
|
||||
#include <linux/elf.h> /* for ELF_EM */
|
||||
#include <linux/err.h>
|
||||
#include <linux/sched.h>
|
||||
@@ -103,8 +103,7 @@ static inline void syscall_set_arguments(struct task_struct *task,
|
||||
memcpy(®s->ARM_r0 + i, args, n * sizeof(args[0]));
|
||||
}
|
||||
|
||||
static inline int syscall_get_arch(struct task_struct *task,
|
||||
struct pt_regs *regs)
|
||||
static inline int syscall_get_arch(void)
|
||||
{
|
||||
/* ARM tasks don't change audit architectures on the fly. */
|
||||
return AUDIT_ARCH_ARM;
|
||||
|
||||
@@ -45,6 +45,7 @@ config IA64
|
||||
select HAVE_MOD_ARCH_SPECIFIC
|
||||
select MODULES_USE_ELF_RELA
|
||||
select ARCH_USE_CMPXCHG_LOCKREF
|
||||
select HAVE_ARCH_AUDITSYSCALL
|
||||
default y
|
||||
help
|
||||
The Itanium Processor Family is Intel's 64-bit successor to
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
#define __ASM_MIPS_SYSCALL_H
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/audit.h>
|
||||
#include <uapi/linux/audit.h>
|
||||
#include <linux/elf-em.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/sched.h>
|
||||
@@ -127,12 +127,11 @@ extern const unsigned long sys_call_table[];
|
||||
extern const unsigned long sys32_call_table[];
|
||||
extern const unsigned long sysn32_call_table[];
|
||||
|
||||
static inline int syscall_get_arch(struct task_struct *task,
|
||||
struct pt_regs *regs)
|
||||
static inline int syscall_get_arch(void)
|
||||
{
|
||||
int arch = EM_MIPS;
|
||||
#ifdef CONFIG_64BIT
|
||||
if (!test_tsk_thread_flag(task, TIF_32BIT_REGS))
|
||||
if (!test_thread_flag(TIF_32BIT_REGS))
|
||||
arch |= __AUDIT_ARCH_64BIT;
|
||||
#endif
|
||||
#if defined(__LITTLE_ENDIAN)
|
||||
|
||||
@@ -649,7 +649,7 @@ asmlinkage long syscall_trace_enter(struct pt_regs *regs, long syscall)
|
||||
if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
|
||||
trace_sys_enter(regs, regs->regs[2]);
|
||||
|
||||
audit_syscall_entry(syscall_get_arch(current, regs),
|
||||
audit_syscall_entry(syscall_get_arch(),
|
||||
syscall,
|
||||
regs->regs[4], regs->regs[5],
|
||||
regs->regs[6], regs->regs[7]);
|
||||
|
||||
@@ -28,6 +28,7 @@ config PARISC
|
||||
select CLONE_BACKWARDS
|
||||
select TTY # Needed for pdc_cons.c
|
||||
select HAVE_DEBUG_STACKOVERFLOW
|
||||
select HAVE_ARCH_AUDITSYSCALL
|
||||
|
||||
help
|
||||
The PA-RISC microprocessor is designed by Hewlett-Packard and used
|
||||
|
||||
@@ -144,6 +144,7 @@ config PPC
|
||||
select HAVE_DEBUG_STACKOVERFLOW
|
||||
select HAVE_IRQ_EXIT_ON_IRQ_STACK
|
||||
select ARCH_USE_CMPXCHG_LOCKREF if PPC64
|
||||
select HAVE_ARCH_AUDITSYSCALL
|
||||
|
||||
config GENERIC_CSUM
|
||||
def_bool CPU_LITTLE_ENDIAN
|
||||
|
||||
@@ -103,6 +103,7 @@ config S390
|
||||
select GENERIC_SMP_IDLE_THREAD
|
||||
select GENERIC_TIME_VSYSCALL
|
||||
select HAVE_ALIGNED_STRUCT_PAGE if SLUB
|
||||
select HAVE_ARCH_AUDITSYSCALL
|
||||
select HAVE_ARCH_JUMP_LABEL if !MARCH_G5
|
||||
select HAVE_ARCH_SECCOMP_FILTER
|
||||
select HAVE_ARCH_TRACEHOOK
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
#ifndef _ASM_SYSCALL_H
|
||||
#define _ASM_SYSCALL_H 1
|
||||
|
||||
#include <linux/audit.h>
|
||||
#include <uapi/linux/audit.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/err.h>
|
||||
#include <asm/ptrace.h>
|
||||
@@ -89,11 +89,10 @@ static inline void syscall_set_arguments(struct task_struct *task,
|
||||
regs->orig_gpr2 = args[0];
|
||||
}
|
||||
|
||||
static inline int syscall_get_arch(struct task_struct *task,
|
||||
struct pt_regs *regs)
|
||||
static inline int syscall_get_arch(void)
|
||||
{
|
||||
#ifdef CONFIG_COMPAT
|
||||
if (test_tsk_thread_flag(task, TIF_31BIT))
|
||||
if (test_tsk_thread_flag(current, TIF_31BIT))
|
||||
return AUDIT_ARCH_S390;
|
||||
#endif
|
||||
return sizeof(long) == 8 ? AUDIT_ARCH_S390X : AUDIT_ARCH_S390;
|
||||
|
||||
@@ -42,6 +42,7 @@ config SUPERH
|
||||
select MODULES_USE_ELF_RELA
|
||||
select OLD_SIGSUSPEND
|
||||
select OLD_SIGACTION
|
||||
select HAVE_ARCH_AUDITSYSCALL
|
||||
help
|
||||
The SuperH is a RISC processor targeted for use in embedded systems
|
||||
and consumer electronics; it was also used in the Sega Dreamcast
|
||||
|
||||
@@ -77,6 +77,7 @@ config SPARC64
|
||||
select ARCH_HAVE_NMI_SAFE_CMPXCHG
|
||||
select HAVE_C_RECORDMCOUNT
|
||||
select NO_BOOTMEM
|
||||
select HAVE_ARCH_AUDITSYSCALL
|
||||
|
||||
config ARCH_DEFCONFIG
|
||||
string
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
config UML
|
||||
bool
|
||||
default y
|
||||
select HAVE_ARCH_AUDITSYSCALL
|
||||
select HAVE_UID16
|
||||
select GENERIC_IRQ_SHOW
|
||||
select GENERIC_CPU_DEVICES
|
||||
|
||||
@@ -129,6 +129,7 @@ config X86
|
||||
select HAVE_IRQ_EXIT_ON_IRQ_STACK if X86_64
|
||||
select HAVE_CC_STACKPROTECTOR
|
||||
select GENERIC_CPU_AUTOPROBE
|
||||
select HAVE_ARCH_AUDITSYSCALL
|
||||
|
||||
config INSTRUCTION_DECODER
|
||||
def_bool y
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
#ifndef _ASM_X86_SYSCALL_H
|
||||
#define _ASM_X86_SYSCALL_H
|
||||
|
||||
#include <linux/audit.h>
|
||||
#include <uapi/linux/audit.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/err.h>
|
||||
#include <asm/asm-offsets.h> /* For NR_syscalls */
|
||||
@@ -91,8 +91,7 @@ static inline void syscall_set_arguments(struct task_struct *task,
|
||||
memcpy(®s->bx + i, args, n * sizeof(args[0]));
|
||||
}
|
||||
|
||||
static inline int syscall_get_arch(struct task_struct *task,
|
||||
struct pt_regs *regs)
|
||||
static inline int syscall_get_arch(void)
|
||||
{
|
||||
return AUDIT_ARCH_I386;
|
||||
}
|
||||
@@ -221,8 +220,7 @@ static inline void syscall_set_arguments(struct task_struct *task,
|
||||
}
|
||||
}
|
||||
|
||||
static inline int syscall_get_arch(struct task_struct *task,
|
||||
struct pt_regs *regs)
|
||||
static inline int syscall_get_arch(void)
|
||||
{
|
||||
#ifdef CONFIG_IA32_EMULATION
|
||||
/*
|
||||
@@ -234,7 +232,7 @@ static inline int syscall_get_arch(struct task_struct *task,
|
||||
*
|
||||
* x32 tasks should be considered AUDIT_ARCH_X86_64.
|
||||
*/
|
||||
if (task_thread_info(task)->status & TS_COMPAT)
|
||||
if (task_thread_info(current)->status & TS_COMPAT)
|
||||
return AUDIT_ARCH_I386;
|
||||
#endif
|
||||
/* Both x32 and x86_64 are considered "64-bit". */
|
||||
|
||||
@@ -65,6 +65,7 @@ static void tty_audit_log(const char *description, int major, int minor,
|
||||
{
|
||||
struct audit_buffer *ab;
|
||||
struct task_struct *tsk = current;
|
||||
pid_t pid = task_pid_nr(tsk);
|
||||
uid_t uid = from_kuid(&init_user_ns, task_uid(tsk));
|
||||
uid_t loginuid = from_kuid(&init_user_ns, audit_get_loginuid(tsk));
|
||||
unsigned int sessionid = audit_get_sessionid(tsk);
|
||||
@@ -74,7 +75,7 @@ static void tty_audit_log(const char *description, int major, int minor,
|
||||
char name[sizeof(tsk->comm)];
|
||||
|
||||
audit_log_format(ab, "%s pid=%u uid=%u auid=%u ses=%u major=%d"
|
||||
" minor=%d comm=", description, tsk->pid, uid,
|
||||
" minor=%d comm=", description, pid, uid,
|
||||
loginuid, sessionid, major, minor);
|
||||
get_task_comm(name, tsk);
|
||||
audit_log_untrustedstring(ab, name);
|
||||
|
||||
@@ -200,41 +200,9 @@ static int proc_root_link(struct dentry *dentry, struct path *path)
|
||||
return result;
|
||||
}
|
||||
|
||||
static int proc_pid_cmdline(struct task_struct *task, char * buffer)
|
||||
static int proc_pid_cmdline(struct task_struct *task, char *buffer)
|
||||
{
|
||||
int res = 0;
|
||||
unsigned int len;
|
||||
struct mm_struct *mm = get_task_mm(task);
|
||||
if (!mm)
|
||||
goto out;
|
||||
if (!mm->arg_end)
|
||||
goto out_mm; /* Shh! No looking before we're done */
|
||||
|
||||
len = mm->arg_end - mm->arg_start;
|
||||
|
||||
if (len > PAGE_SIZE)
|
||||
len = PAGE_SIZE;
|
||||
|
||||
res = access_process_vm(task, mm->arg_start, buffer, len, 0);
|
||||
|
||||
// If the nul at the end of args has been overwritten, then
|
||||
// assume application is using setproctitle(3).
|
||||
if (res > 0 && buffer[res-1] != '\0' && len < PAGE_SIZE) {
|
||||
len = strnlen(buffer, res);
|
||||
if (len < res) {
|
||||
res = len;
|
||||
} else {
|
||||
len = mm->env_end - mm->env_start;
|
||||
if (len > PAGE_SIZE - res)
|
||||
len = PAGE_SIZE - res;
|
||||
res += access_process_vm(task, mm->env_start, buffer+res, len, 0);
|
||||
res = strnlen(buffer, res);
|
||||
}
|
||||
}
|
||||
out_mm:
|
||||
mmput(mm);
|
||||
out:
|
||||
return res;
|
||||
return get_cmdline(task, buffer, PAGE_SIZE);
|
||||
}
|
||||
|
||||
static int proc_pid_auxv(struct task_struct *task, char *buffer)
|
||||
|
||||
@@ -144,8 +144,6 @@ void syscall_set_arguments(struct task_struct *task, struct pt_regs *regs,
|
||||
|
||||
/**
|
||||
* syscall_get_arch - return the AUDIT_ARCH for the current system call
|
||||
* @task: task of interest, must be in system call entry tracing
|
||||
* @regs: task_pt_regs() of @task
|
||||
*
|
||||
* Returns the AUDIT_ARCH_* based on the system call convention in use.
|
||||
*
|
||||
@@ -155,5 +153,5 @@ void syscall_set_arguments(struct task_struct *task, struct pt_regs *regs,
|
||||
* Architectures which permit CONFIG_HAVE_ARCH_SECCOMP_FILTER must
|
||||
* provide an implementation of this.
|
||||
*/
|
||||
int syscall_get_arch(struct task_struct *task, struct pt_regs *regs);
|
||||
int syscall_get_arch(void);
|
||||
#endif /* _ASM_SYSCALL_H */
|
||||
|
||||
@@ -79,6 +79,14 @@ extern int is_audit_feature_set(int which);
|
||||
extern int __init audit_register_class(int class, unsigned *list);
|
||||
extern int audit_classify_syscall(int abi, unsigned syscall);
|
||||
extern int audit_classify_arch(int arch);
|
||||
/* only for compat system calls */
|
||||
extern unsigned compat_write_class[];
|
||||
extern unsigned compat_read_class[];
|
||||
extern unsigned compat_dir_class[];
|
||||
extern unsigned compat_chattr_class[];
|
||||
extern unsigned compat_signal_class[];
|
||||
|
||||
extern int __weak audit_classify_compat_syscall(int abi, unsigned syscall);
|
||||
|
||||
/* audit_names->type values */
|
||||
#define AUDIT_TYPE_UNKNOWN 0 /* we don't know yet */
|
||||
@@ -94,6 +102,12 @@ struct filename;
|
||||
|
||||
extern void audit_log_session_info(struct audit_buffer *ab);
|
||||
|
||||
#ifdef CONFIG_AUDIT_COMPAT_GENERIC
|
||||
#define audit_is_compat(arch) (!((arch) & __AUDIT_ARCH_64BIT))
|
||||
#else
|
||||
#define audit_is_compat(arch) false
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_AUDITSYSCALL
|
||||
/* These are defined in auditsc.c */
|
||||
/* Public API */
|
||||
|
||||
@@ -1204,6 +1204,7 @@ void account_page_writeback(struct page *page);
|
||||
int set_page_dirty(struct page *page);
|
||||
int set_page_dirty_lock(struct page *page);
|
||||
int clear_page_dirty_for_io(struct page *page);
|
||||
int get_cmdline(struct task_struct *task, char *buffer, int buflen);
|
||||
|
||||
/* Is the vma a continuation of the stack vma above it? */
|
||||
static inline int vma_growsdown(struct vm_area_struct *vma, unsigned long addr)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user