History

riscv: add audit support

On RISC-V (riscv) audit is supported through generic lib/audit.c. The patch adds required arch specific definitions.

David Abdurachmanov committed 8 years ago

Commit efe75c41 parent 8fe28cb6 files · +26 −2Browse files

Unified · Split

6 files
  1. arch/riscv/Kconfig +1 −0
  2. arch/riscv/include/asm/ptrace.h +5 −0
  3. arch/riscv/include/asm/syscall.h +10 −0
  4. arch/riscv/include/asm/thread_info.h +6 −0
  5. arch/riscv/kernel/entry.S +2 −2
  6. include/uapi/linux/audit.h +2 −0
arch/riscv/Kconfig+1−0
@@ -28,6 +28,7 @@ config RISCV · 27 unmodified lines
28 select GENERIC_STRNLEN_USER28 select GENERIC_STRNLEN_USER
29 select GENERIC_SMP_IDLE_THREAD29 select GENERIC_SMP_IDLE_THREAD
30 select GENERIC_ATOMIC64 if !64BIT || !RISCV_ISA_A30 select GENERIC_ATOMIC64 if !64BIT || !RISCV_ISA_A
31 select HAVE_ARCH_AUDITSYSCALL
31 select HAVE_MEMBLOCK_NODE_MAP32 select HAVE_MEMBLOCK_NODE_MAP
32 select HAVE_DMA_CONTIGUOUS33 select HAVE_DMA_CONTIGUOUS
33 select HAVE_FUTEX_CMPXCHG if FUTEX34 select HAVE_FUTEX_CMPXCHG if FUTEX
arch/riscv/include/asm/ptrace.h+5−0
@@ -113,6 +113,11 @@ static inline void frame_pointer_set(struct pt_regs *regs, · 112 unmodified lines
113 SET_FP(regs, val);113 SET_FP(regs, val);
114}114}
115 115
116static inline unsigned long regs_return_value(struct pt_regs *regs)
117{
118 return regs->a0;
119}
120
116#endif /* __ASSEMBLY__ */121#endif /* __ASSEMBLY__ */
117 122
118#endif /* _ASM_RISCV_PTRACE_H */123#endif /* _ASM_RISCV_PTRACE_H */
arch/riscv/include/asm/syscall.h+10−0
@@ -18,6 +18,7 @@ · 17 unmodified lines
18#ifndef _ASM_RISCV_SYSCALL_H18#ifndef _ASM_RISCV_SYSCALL_H
19#define _ASM_RISCV_SYSCALL_H19#define _ASM_RISCV_SYSCALL_H
20 20
21#include <uapi/linux/audit.h>
21#include <linux/sched.h>22#include <linux/sched.h>
22#include <linux/err.h>23#include <linux/err.h>
23 24
@@ -99,4 +100,13 @@ static inline void syscall_set_arguments(struct task_struct *task, · 75 unmodified lines
99 memcpy(&regs->a1 + i * sizeof(regs->a1), args, n * sizeof(regs->a0));100 memcpy(&regs->a1 + i * sizeof(regs->a1), args, n * sizeof(regs->a0));
100}101}
101 102
103static inline int syscall_get_arch(void)
104{
105#ifdef CONFIG_64BIT
106 return AUDIT_ARCH_RISCV64;
107#else
108 return AUDIT_ARCH_RISCV32;
109#endif
110}
111
102#endif /* _ASM_RISCV_SYSCALL_H */112#endif /* _ASM_RISCV_SYSCALL_H */
arch/riscv/include/asm/thread_info.h+6−0
@@ -80,13 +80,19 @@ struct thread_info { · 79 unmodified lines
80#define TIF_RESTORE_SIGMASK 4 /* restore signal mask in do_signal() */80#define TIF_RESTORE_SIGMASK 4 /* restore signal mask in do_signal() */
81#define TIF_MEMDIE 5 /* is terminating due to OOM killer */81#define TIF_MEMDIE 5 /* is terminating due to OOM killer */
82#define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */82#define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
83#define TIF_SYSCALL_AUDIT 7 /* syscall auditing */
83 84
84#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)85#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
85#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)86#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
86#define _TIF_SIGPENDING (1 << TIF_SIGPENDING)87#define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
87#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)88#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
89#define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
90#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
88 91
89#define _TIF_WORK_MASK \92#define _TIF_WORK_MASK \
90 (_TIF_NOTIFY_RESUME | _TIF_SIGPENDING | _TIF_NEED_RESCHED)93 (_TIF_NOTIFY_RESUME | _TIF_SIGPENDING | _TIF_NEED_RESCHED)
91 94
95#define _TIF_SYSCALL_WORK \
96 (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_TRACEPOINT | _TIF_SYSCALL_AUDIT)
97
92#endif /* _ASM_RISCV_THREAD_INFO_H */98#endif /* _ASM_RISCV_THREAD_INFO_H */
arch/riscv/kernel/entry.S+2−2
@@ -201,7 +201,7 @@ handle_syscall: · 200 unmodified lines
201 REG_S s2, PT_SEPC(sp)201 REG_S s2, PT_SEPC(sp)
202 /* Trace syscalls, but only if requested by the user. */202 /* Trace syscalls, but only if requested by the user. */
203 REG_L t0, TASK_TI_FLAGS(tp)203 REG_L t0, TASK_TI_FLAGS(tp)
204 andi t0, t0, _TIF_SYSCALL_TRACE204 andi t0, t0, _TIF_SYSCALL_WORK
205 bnez t0, handle_syscall_trace_enter205 bnez t0, handle_syscall_trace_enter
206check_syscall_nr:206check_syscall_nr:
207 /* Check to make sure we don't jump to a bogus syscall number. */207 /* Check to make sure we don't jump to a bogus syscall number. */
@@ -221,7 +221,7 @@ ret_from_syscall: · 13 unmodified lines
221 REG_S a0, PT_A0(sp)221 REG_S a0, PT_A0(sp)
222 /* Trace syscalls, but only if requested by the user. */222 /* Trace syscalls, but only if requested by the user. */
223 REG_L t0, TASK_TI_FLAGS(tp)223 REG_L t0, TASK_TI_FLAGS(tp)
224 andi t0, t0, _TIF_SYSCALL_TRACE224 andi t0, t0, _TIF_SYSCALL_WORK
225 bnez t0, handle_syscall_trace_exit225 bnez t0, handle_syscall_trace_exit
226 226
227ret_from_exception:227ret_from_exception:
include/uapi/linux/audit.h+2−0
@@ -399,6 +399,8 @@ enum { · 398 unmodified lines
399/* do not define AUDIT_ARCH_PPCLE since it is not supported by audit */399/* do not define AUDIT_ARCH_PPCLE since it is not supported by audit */
400#define AUDIT_ARCH_PPC64 (EM_PPC64|__AUDIT_ARCH_64BIT)400#define AUDIT_ARCH_PPC64 (EM_PPC64|__AUDIT_ARCH_64BIT)
401#define AUDIT_ARCH_PPC64LE (EM_PPC64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)401#define AUDIT_ARCH_PPC64LE (EM_PPC64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
402#define AUDIT_ARCH_RISCV32 (EM_RISCV|__AUDIT_ARCH_LE)
403#define AUDIT_ARCH_RISCV64 (EM_RISCV|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
402#define AUDIT_ARCH_S390 (EM_S390)404#define AUDIT_ARCH_S390 (EM_S390)
403#define AUDIT_ARCH_S390X (EM_S390|__AUDIT_ARCH_64BIT)405#define AUDIT_ARCH_S390X (EM_S390|__AUDIT_ARCH_64BIT)
404#define AUDIT_ARCH_SH (EM_SH)406#define AUDIT_ARCH_SH (EM_SH)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t