forked from Minki/linux
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
This commit is contained in:
commit
f43a64c5e1
@ -57,11 +57,11 @@ sys_call_table:
|
||||
/*180*/ .long sys_flistxattr, sys_removexattr, sys_lremovexattr, sys_sigpending, sys_ni_syscall
|
||||
/*185*/ .long sys_setpgid, sys_fremovexattr, sys_tkill, sys_exit_group, sys_newuname
|
||||
/*190*/ .long sys_init_module, sys_personality, sparc_remap_file_pages, sys_epoll_create, sys_epoll_ctl
|
||||
/*195*/ .long sys_epoll_wait, sys_nis_syscall, sys_getppid, sparc_sigaction, sys_sgetmask
|
||||
/*195*/ .long sys_epoll_wait, sys_ioprio_set, sys_getppid, sparc_sigaction, sys_sgetmask
|
||||
/*200*/ .long sys_ssetmask, sys_sigsuspend, sys_newlstat, sys_uselib, old_readdir
|
||||
/*205*/ .long sys_readahead, sys_socketcall, sys_syslog, sys_lookup_dcookie, sys_fadvise64
|
||||
/*210*/ .long sys_fadvise64_64, sys_tgkill, sys_waitpid, sys_swapoff, sys_sysinfo
|
||||
/*215*/ .long sys_ipc, sys_sigreturn, sys_clone, sys_nis_syscall, sys_adjtimex
|
||||
/*215*/ .long sys_ipc, sys_sigreturn, sys_clone, sys_ioprio_get, sys_adjtimex
|
||||
/*220*/ .long sys_sigprocmask, sys_ni_syscall, sys_delete_module, sys_ni_syscall, sys_getpgid
|
||||
/*225*/ .long sys_bdflush, sys_sysfs, sys_nis_syscall, sys_setfsuid16, sys_setfsgid16
|
||||
/*230*/ .long sys_select, sys_time, sys_nis_syscall, sys_stime, sys_statfs64
|
||||
|
@ -43,6 +43,23 @@ config SPARC64_PAGE_SIZE_4MB
|
||||
|
||||
endchoice
|
||||
|
||||
config SECCOMP
|
||||
bool "Enable seccomp to safely compute untrusted bytecode"
|
||||
depends on PROC_FS
|
||||
default y
|
||||
help
|
||||
This kernel feature is useful for number crunching applications
|
||||
that may need to compute untrusted bytecode during their
|
||||
execution. By using pipes or other transports made available to
|
||||
the process as file descriptors supporting the read/write
|
||||
syscalls, it's possible to isolate those applications in
|
||||
their own address space using seccomp. Once seccomp is
|
||||
enabled via /proc/<pid>/seccomp, it cannot be disabled
|
||||
and the task is only allowed to execute a few safe syscalls
|
||||
defined by each seccomp mode.
|
||||
|
||||
If unsure, say Y. Only embedded should say N here.
|
||||
|
||||
source kernel/Kconfig.hz
|
||||
|
||||
source "init/Kconfig"
|
||||
|
@ -22,8 +22,6 @@
|
||||
#include <asm/estate.h>
|
||||
#include <asm/auxio.h>
|
||||
|
||||
/* #define SYSCALL_TRACING 1 */
|
||||
|
||||
#define curptr g6
|
||||
|
||||
#define NR_SYSCALLS 284 /* Each OS is different... */
|
||||
@ -1554,11 +1552,12 @@ sys_ptrace: add %sp, PTREGS_OFF, %o0
|
||||
nop
|
||||
.align 32
|
||||
1: ldx [%curptr + TI_FLAGS], %l5
|
||||
andcc %l5, _TIF_SYSCALL_TRACE, %g0
|
||||
andcc %l5, (_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT), %g0
|
||||
be,pt %icc, rtrap
|
||||
clr %l6
|
||||
add %sp, PTREGS_OFF, %o0
|
||||
call syscall_trace
|
||||
nop
|
||||
mov 1, %o1
|
||||
|
||||
ba,pt %xcc, rtrap
|
||||
clr %l6
|
||||
@ -1642,18 +1641,20 @@ linux_sparc_ni_syscall:
|
||||
or %l7, %lo(sys_ni_syscall), %l7
|
||||
|
||||
linux_syscall_trace32:
|
||||
add %sp, PTREGS_OFF, %o0
|
||||
call syscall_trace
|
||||
nop
|
||||
clr %o1
|
||||
srl %i0, 0, %o0
|
||||
mov %i4, %o4
|
||||
srl %i4, 0, %o4
|
||||
srl %i1, 0, %o1
|
||||
srl %i2, 0, %o2
|
||||
b,pt %xcc, 2f
|
||||
srl %i3, 0, %o3
|
||||
|
||||
linux_syscall_trace:
|
||||
add %sp, PTREGS_OFF, %o0
|
||||
call syscall_trace
|
||||
nop
|
||||
clr %o1
|
||||
mov %i0, %o0
|
||||
mov %i1, %o1
|
||||
mov %i2, %o2
|
||||
@ -1671,11 +1672,6 @@ linux_sparc_syscall32:
|
||||
bgeu,pn %xcc, linux_sparc_ni_syscall ! CTI
|
||||
srl %i0, 0, %o0 ! IEU0
|
||||
sll %g1, 2, %l4 ! IEU0 Group
|
||||
#ifdef SYSCALL_TRACING
|
||||
call syscall_trace_entry
|
||||
add %sp, PTREGS_OFF, %o0
|
||||
srl %i0, 0, %o0
|
||||
#endif
|
||||
srl %i4, 0, %o4 ! IEU1
|
||||
lduw [%l7 + %l4], %l7 ! Load
|
||||
srl %i1, 0, %o1 ! IEU0 Group
|
||||
@ -1683,7 +1679,7 @@ linux_sparc_syscall32:
|
||||
|
||||
srl %i5, 0, %o5 ! IEU1
|
||||
srl %i2, 0, %o2 ! IEU0 Group
|
||||
andcc %l0, _TIF_SYSCALL_TRACE, %g0 ! IEU0 Group
|
||||
andcc %l0, (_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT), %g0
|
||||
bne,pn %icc, linux_syscall_trace32 ! CTI
|
||||
mov %i0, %l5 ! IEU1
|
||||
call %l7 ! CTI Group brk forced
|
||||
@ -1699,11 +1695,6 @@ linux_sparc_syscall:
|
||||
bgeu,pn %xcc, linux_sparc_ni_syscall ! CTI
|
||||
mov %i0, %o0 ! IEU0
|
||||
sll %g1, 2, %l4 ! IEU0 Group
|
||||
#ifdef SYSCALL_TRACING
|
||||
call syscall_trace_entry
|
||||
add %sp, PTREGS_OFF, %o0
|
||||
mov %i0, %o0
|
||||
#endif
|
||||
mov %i1, %o1 ! IEU1
|
||||
lduw [%l7 + %l4], %l7 ! Load
|
||||
4: mov %i2, %o2 ! IEU0 Group
|
||||
@ -1711,7 +1702,7 @@ linux_sparc_syscall:
|
||||
|
||||
mov %i3, %o3 ! IEU1
|
||||
mov %i4, %o4 ! IEU0 Group
|
||||
andcc %l0, _TIF_SYSCALL_TRACE, %g0 ! IEU1 Group+1 bubble
|
||||
andcc %l0, (_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT), %g0
|
||||
bne,pn %icc, linux_syscall_trace ! CTI Group
|
||||
mov %i0, %l5 ! IEU0
|
||||
2: call %l7 ! CTI Group brk forced
|
||||
@ -1720,12 +1711,6 @@ linux_sparc_syscall:
|
||||
|
||||
3: stx %o0, [%sp + PTREGS_OFF + PT_V9_I0]
|
||||
ret_sys_call:
|
||||
#ifdef SYSCALL_TRACING
|
||||
mov %o0, %o1
|
||||
call syscall_trace_exit
|
||||
add %sp, PTREGS_OFF, %o0
|
||||
mov %o1, %o0
|
||||
#endif
|
||||
ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %g3
|
||||
ldx [%sp + PTREGS_OFF + PT_V9_TNPC], %l1 ! pc = npc
|
||||
sra %o0, 0, %o0
|
||||
@ -1745,7 +1730,7 @@ ret_sys_call:
|
||||
1:
|
||||
cmp %o0, -ERESTART_RESTARTBLOCK
|
||||
bgeu,pn %xcc, 1f
|
||||
andcc %l0, _TIF_SYSCALL_TRACE, %l6
|
||||
andcc %l0, (_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT), %l6
|
||||
80:
|
||||
/* System call success, clear Carry condition code. */
|
||||
andn %g3, %g2, %g3
|
||||
@ -1760,7 +1745,7 @@ ret_sys_call:
|
||||
/* System call failure, set Carry condition code.
|
||||
* Also, get abs(errno) to return to the process.
|
||||
*/
|
||||
andcc %l0, _TIF_SYSCALL_TRACE, %l6
|
||||
andcc %l0, (_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT), %l6
|
||||
sub %g0, %o0, %o0
|
||||
or %g3, %g2, %g3
|
||||
stx %o0, [%sp + PTREGS_OFF + PT_V9_I0]
|
||||
@ -1773,8 +1758,9 @@ ret_sys_call:
|
||||
b,pt %xcc, rtrap
|
||||
stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC]
|
||||
linux_syscall_trace2:
|
||||
add %sp, PTREGS_OFF, %o0
|
||||
call syscall_trace
|
||||
nop
|
||||
mov 1, %o1
|
||||
stx %l1, [%sp + PTREGS_OFF + PT_V9_TPC]
|
||||
ba,pt %xcc, rtrap
|
||||
stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC]
|
||||
|
@ -4,6 +4,8 @@
|
||||
* Copyright (C) 1999 David S. Miller (davem@redhat.com)
|
||||
*/
|
||||
|
||||
#define __KERNEL_SYSCALLS__
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
@ -17,7 +19,6 @@
|
||||
#include <asm/ebus.h>
|
||||
#include <asm/auxio.h>
|
||||
|
||||
#define __KERNEL_SYSCALLS__
|
||||
#include <linux/unistd.h>
|
||||
|
||||
/*
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <linux/smp.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/security.h>
|
||||
#include <linux/seccomp.h>
|
||||
#include <linux/audit.h>
|
||||
#include <linux/signal.h>
|
||||
|
||||
#include <asm/asi.h>
|
||||
@ -628,15 +630,27 @@ out:
|
||||
unlock_kernel();
|
||||
}
|
||||
|
||||
asmlinkage void syscall_trace(void)
|
||||
asmlinkage void syscall_trace(struct pt_regs *regs, int syscall_exit_p)
|
||||
{
|
||||
#ifdef DEBUG_PTRACE
|
||||
printk("%s [%d]: syscall_trace\n", current->comm, current->pid);
|
||||
#endif
|
||||
if (!test_thread_flag(TIF_SYSCALL_TRACE))
|
||||
return;
|
||||
/* do the secure computing check first */
|
||||
secure_computing(regs->u_regs[UREG_G1]);
|
||||
|
||||
if (unlikely(current->audit_context) && syscall_exit_p) {
|
||||
unsigned long tstate = regs->tstate;
|
||||
int result = AUDITSC_SUCCESS;
|
||||
|
||||
if (unlikely(tstate & (TSTATE_XCARRY | TSTATE_ICARRY)))
|
||||
result = AUDITSC_FAILURE;
|
||||
|
||||
audit_syscall_exit(current, result, regs->u_regs[UREG_I0]);
|
||||
}
|
||||
|
||||
if (!(current->ptrace & PT_PTRACED))
|
||||
return;
|
||||
goto out;
|
||||
|
||||
if (!test_thread_flag(TIF_SYSCALL_TRACE))
|
||||
goto out;
|
||||
|
||||
ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
|
||||
? 0x80 : 0));
|
||||
|
||||
@ -645,12 +659,20 @@ asmlinkage void syscall_trace(void)
|
||||
* for normal use. strace only continues with a signal if the
|
||||
* stopping signal is not SIGTRAP. -brl
|
||||
*/
|
||||
#ifdef DEBUG_PTRACE
|
||||
printk("%s [%d]: syscall_trace exit= %x\n", current->comm,
|
||||
current->pid, current->exit_code);
|
||||
#endif
|
||||
if (current->exit_code) {
|
||||
send_sig (current->exit_code, current, 1);
|
||||
send_sig(current->exit_code, current, 1);
|
||||
current->exit_code = 0;
|
||||
}
|
||||
|
||||
out:
|
||||
if (unlikely(current->audit_context) && !syscall_exit_p)
|
||||
audit_syscall_entry(current,
|
||||
(test_thread_flag(TIF_32BIT) ?
|
||||
AUDIT_ARCH_SPARC :
|
||||
AUDIT_ARCH_SPARC64),
|
||||
regs->u_regs[UREG_G1],
|
||||
regs->u_regs[UREG_I0],
|
||||
regs->u_regs[UREG_I1],
|
||||
regs->u_regs[UREG_I2],
|
||||
regs->u_regs[UREG_I3]);
|
||||
}
|
||||
|
@ -45,8 +45,8 @@ extern void calibrate_delay(void);
|
||||
/* Please don't make this stuff initdata!!! --DaveM */
|
||||
static unsigned char boot_cpu_id;
|
||||
|
||||
cpumask_t cpu_online_map = CPU_MASK_NONE;
|
||||
cpumask_t phys_cpu_present_map = CPU_MASK_NONE;
|
||||
cpumask_t cpu_online_map = CPU_MASK_NONE __read_mostly;
|
||||
cpumask_t phys_cpu_present_map = CPU_MASK_NONE __read_mostly;
|
||||
static cpumask_t smp_commenced_mask;
|
||||
static cpumask_t cpu_callout_map;
|
||||
|
||||
@ -155,7 +155,7 @@ void cpu_panic(void)
|
||||
panic("SMP bolixed\n");
|
||||
}
|
||||
|
||||
static unsigned long current_tick_offset;
|
||||
static unsigned long current_tick_offset __read_mostly;
|
||||
|
||||
/* This tick register synchronization scheme is taken entirely from
|
||||
* the ia64 port, see arch/ia64/kernel/smpboot.c for details and credit.
|
||||
@ -1193,8 +1193,8 @@ void smp_send_stop(void)
|
||||
{
|
||||
}
|
||||
|
||||
unsigned long __per_cpu_base;
|
||||
unsigned long __per_cpu_shift;
|
||||
unsigned long __per_cpu_base __read_mostly;
|
||||
unsigned long __per_cpu_shift __read_mostly;
|
||||
|
||||
EXPORT_SYMBOL(__per_cpu_base);
|
||||
EXPORT_SYMBOL(__per_cpu_shift);
|
||||
|
@ -79,7 +79,7 @@ extern void linux_sparc_syscall(void);
|
||||
extern void rtrap(void);
|
||||
extern void show_regs(struct pt_regs *);
|
||||
extern void solaris_syscall(void);
|
||||
extern void syscall_trace(void);
|
||||
extern void syscall_trace(struct pt_regs *, int);
|
||||
extern u32 sunos_sys_table[], sys_call_table32[];
|
||||
extern void tl0_solaris(void);
|
||||
extern void sys_sigsuspend(void);
|
||||
|
@ -135,6 +135,8 @@ SIGN2(sys32_shutdown, sys_shutdown, %o0, %o1)
|
||||
SIGN3(sys32_socketpair, sys_socketpair, %o0, %o1, %o2)
|
||||
SIGN1(sys32_getpeername, sys_getpeername, %o0)
|
||||
SIGN1(sys32_getsockname, sys_getsockname, %o0)
|
||||
SIGN2(sys32_ioprio_get, sys_ioprio_get, %o0, %o1)
|
||||
SIGN3(sys32_ioprio_set, sys_ioprio_set, %o0, %o1, %o2)
|
||||
|
||||
.globl sys32_mmap2
|
||||
sys32_mmap2:
|
||||
|
@ -59,11 +59,11 @@ sys_call_table32:
|
||||
/*180*/ .word sys32_flistxattr, sys_removexattr, sys_lremovexattr, compat_sys_sigpending, sys_ni_syscall
|
||||
.word sys32_setpgid, sys32_fremovexattr, sys32_tkill, sys32_exit_group, sparc64_newuname
|
||||
/*190*/ .word sys32_init_module, sparc64_personality, sys_remap_file_pages, sys32_epoll_create, sys32_epoll_ctl
|
||||
.word sys32_epoll_wait, sys_nis_syscall, sys_getppid, sys32_sigaction, sys_sgetmask
|
||||
.word sys32_epoll_wait, sys32_ioprio_set, sys_getppid, sys32_sigaction, sys_sgetmask
|
||||
/*200*/ .word sys32_ssetmask, sys_sigsuspend, compat_sys_newlstat, sys_uselib, compat_sys_old_readdir
|
||||
.word sys32_readahead, sys32_socketcall, sys32_syslog, sys32_lookup_dcookie, sys32_fadvise64
|
||||
/*210*/ .word sys32_fadvise64_64, sys32_tgkill, sys32_waitpid, sys_swapoff, sys32_sysinfo
|
||||
.word sys32_ipc, sys32_sigreturn, sys_clone, sys_nis_syscall, sys32_adjtimex
|
||||
.word sys32_ipc, sys32_sigreturn, sys_clone, sys32_ioprio_get, sys32_adjtimex
|
||||
/*220*/ .word sys32_sigprocmask, sys_ni_syscall, sys32_delete_module, sys_ni_syscall, sys32_getpgid
|
||||
.word sys32_bdflush, sys32_sysfs, sys_nis_syscall, sys32_setfsuid16, sys32_setfsgid16
|
||||
/*230*/ .word sys32_select, compat_sys_time, sys_nis_syscall, compat_sys_stime, compat_sys_statfs64
|
||||
@ -125,11 +125,11 @@ sys_call_table:
|
||||
/*180*/ .word sys_flistxattr, sys_removexattr, sys_lremovexattr, sys_nis_syscall, sys_ni_syscall
|
||||
.word sys_setpgid, sys_fremovexattr, sys_tkill, sys_exit_group, sparc64_newuname
|
||||
/*190*/ .word sys_init_module, sparc64_personality, sys_remap_file_pages, sys_epoll_create, sys_epoll_ctl
|
||||
.word sys_epoll_wait, sys_nis_syscall, sys_getppid, sys_nis_syscall, sys_sgetmask
|
||||
.word sys_epoll_wait, sys_ioprio_set, sys_getppid, sys_nis_syscall, sys_sgetmask
|
||||
/*200*/ .word sys_ssetmask, sys_nis_syscall, sys_newlstat, sys_uselib, sys_nis_syscall
|
||||
.word sys_readahead, sys_socketcall, sys_syslog, sys_lookup_dcookie, sys_fadvise64
|
||||
/*210*/ .word sys_fadvise64_64, sys_tgkill, sys_waitpid, sys_swapoff, sys_sysinfo
|
||||
.word sys_ipc, sys_nis_syscall, sys_clone, sys_nis_syscall, sys_adjtimex
|
||||
.word sys_ipc, sys_nis_syscall, sys_clone, sys_ioprio_get, sys_adjtimex
|
||||
/*220*/ .word sys_nis_syscall, sys_ni_syscall, sys_delete_module, sys_ni_syscall, sys_getpgid
|
||||
.word sys_bdflush, sys_sysfs, sys_nis_syscall, sys_setfsuid, sys_setfsgid
|
||||
/*230*/ .word sys_select, sys_nis_syscall, sys_nis_syscall, sys_stime, sys_statfs64
|
||||
|
@ -73,7 +73,7 @@ static __initdata struct sparc64_tick_ops dummy_tick_ops = {
|
||||
.get_tick = dummy_get_tick,
|
||||
};
|
||||
|
||||
struct sparc64_tick_ops *tick_ops = &dummy_tick_ops;
|
||||
struct sparc64_tick_ops *tick_ops __read_mostly = &dummy_tick_ops;
|
||||
|
||||
#define TICK_PRIV_BIT (1UL << 63)
|
||||
|
||||
@ -195,7 +195,7 @@ static unsigned long tick_add_tick(unsigned long adj, unsigned long offset)
|
||||
return new_tick;
|
||||
}
|
||||
|
||||
static struct sparc64_tick_ops tick_operations = {
|
||||
static struct sparc64_tick_ops tick_operations __read_mostly = {
|
||||
.init_tick = tick_init_tick,
|
||||
.get_tick = tick_get_tick,
|
||||
.get_compare = tick_get_compare,
|
||||
@ -276,7 +276,7 @@ static unsigned long stick_add_compare(unsigned long adj)
|
||||
return new_compare;
|
||||
}
|
||||
|
||||
static struct sparc64_tick_ops stick_operations = {
|
||||
static struct sparc64_tick_ops stick_operations __read_mostly = {
|
||||
.init_tick = stick_init_tick,
|
||||
.get_tick = stick_get_tick,
|
||||
.get_compare = stick_get_compare,
|
||||
@ -422,7 +422,7 @@ static unsigned long hbtick_add_compare(unsigned long adj)
|
||||
return val;
|
||||
}
|
||||
|
||||
static struct sparc64_tick_ops hbtick_operations = {
|
||||
static struct sparc64_tick_ops hbtick_operations __read_mostly = {
|
||||
.init_tick = hbtick_init_tick,
|
||||
.get_tick = hbtick_get_tick,
|
||||
.get_compare = hbtick_get_compare,
|
||||
@ -437,10 +437,9 @@ static struct sparc64_tick_ops hbtick_operations = {
|
||||
* NOTE: On SUN5 systems the ticker interrupt comes in using 2
|
||||
* interrupts, one at level14 and one with softint bit 0.
|
||||
*/
|
||||
unsigned long timer_tick_offset;
|
||||
unsigned long timer_tick_compare;
|
||||
unsigned long timer_tick_offset __read_mostly;
|
||||
|
||||
static unsigned long timer_ticks_per_nsec_quotient;
|
||||
static unsigned long timer_ticks_per_nsec_quotient __read_mostly;
|
||||
|
||||
#define TICK_SIZE (tick_nsec / 1000)
|
||||
|
||||
@ -464,7 +463,7 @@ static inline void timer_check_rtc(void)
|
||||
|
||||
static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs)
|
||||
{
|
||||
unsigned long ticks, pstate;
|
||||
unsigned long ticks, compare, pstate;
|
||||
|
||||
write_seqlock(&xtime_lock);
|
||||
|
||||
@ -483,14 +482,14 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs)
|
||||
: "=r" (pstate)
|
||||
: "i" (PSTATE_IE));
|
||||
|
||||
timer_tick_compare = tick_ops->add_compare(timer_tick_offset);
|
||||
compare = tick_ops->add_compare(timer_tick_offset);
|
||||
ticks = tick_ops->get_tick();
|
||||
|
||||
/* Restore PSTATE_IE. */
|
||||
__asm__ __volatile__("wrpr %0, 0x0, %%pstate"
|
||||
: /* no outputs */
|
||||
: "r" (pstate));
|
||||
} while (time_after_eq(ticks, timer_tick_compare));
|
||||
} while (time_after_eq(ticks, compare));
|
||||
|
||||
timer_check_rtc();
|
||||
|
||||
@ -506,11 +505,6 @@ void timer_tick_interrupt(struct pt_regs *regs)
|
||||
|
||||
do_timer(regs);
|
||||
|
||||
/*
|
||||
* Only keep timer_tick_offset uptodate, but don't set TICK_CMPR.
|
||||
*/
|
||||
timer_tick_compare = tick_ops->get_compare() + timer_tick_offset;
|
||||
|
||||
timer_check_rtc();
|
||||
|
||||
write_sequnlock(&xtime_lock);
|
||||
|
@ -32,6 +32,8 @@ SECTIONS
|
||||
.data1 : { *(.data1) }
|
||||
. = ALIGN(64);
|
||||
.data.cacheline_aligned : { *(.data.cacheline_aligned) }
|
||||
. = ALIGN(64);
|
||||
.data.read_mostly : { *(.data.read_mostly) }
|
||||
_edata = .;
|
||||
PROVIDE (edata = .);
|
||||
.fixup : { *(.fixup) }
|
||||
|
@ -33,22 +33,6 @@
|
||||
|
||||
extern struct sparc_phys_banks sp_banks[SPARC_PHYS_BANKS];
|
||||
|
||||
/*
|
||||
* To debug kernel during syscall entry.
|
||||
*/
|
||||
void syscall_trace_entry(struct pt_regs *regs)
|
||||
{
|
||||
printk("scall entry: %s[%d]/cpu%d: %d\n", current->comm, current->pid, smp_processor_id(), (int) regs->u_regs[UREG_G1]);
|
||||
}
|
||||
|
||||
/*
|
||||
* To debug kernel during syscall exit.
|
||||
*/
|
||||
void syscall_trace_exit(struct pt_regs *regs)
|
||||
{
|
||||
printk("scall exit: %s[%d]/cpu%d: %d\n", current->comm, current->pid, smp_processor_id(), (int) regs->u_regs[UREG_G1]);
|
||||
}
|
||||
|
||||
/*
|
||||
* To debug kernel to catch accesses to certain virtual/physical addresses.
|
||||
* Mode = 0 selects physical watchpoints, mode = 1 selects virtual watchpoints.
|
||||
|
@ -24,8 +24,9 @@
|
||||
|
||||
.text
|
||||
solaris_syscall_trace:
|
||||
add %sp, PTREGS_OFF, %o0
|
||||
call syscall_trace
|
||||
nop
|
||||
mov 0, %o1
|
||||
srl %i0, 0, %o0
|
||||
mov %i4, %o4
|
||||
srl %i1, 0, %o1
|
||||
@ -159,8 +160,10 @@ ret_from_solaris:
|
||||
stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC] !npc = npc+4
|
||||
|
||||
solaris_syscall_trace2:
|
||||
add %sp, PTREGS_OFF, %o0
|
||||
call syscall_trace
|
||||
add %l1, 0x4, %l2 /* npc = npc+4 */
|
||||
mov 1, %o1
|
||||
add %l1, 0x4, %l2 /* npc = npc+4 */
|
||||
andcc %l1, 1, %g0
|
||||
bne,pn %icc, 2b
|
||||
nop
|
||||
|
@ -212,7 +212,7 @@
|
||||
#define __NR_epoll_create 193 /* Linux Specific */
|
||||
#define __NR_epoll_ctl 194 /* Linux Specific */
|
||||
#define __NR_epoll_wait 195 /* Linux Specific */
|
||||
/* #define __NR_ulimit 196 Linux Specific */
|
||||
#define __NR_ioprio_set 196 /* Linux Specific */
|
||||
#define __NR_getppid 197 /* Linux Specific */
|
||||
#define __NR_sigaction 198 /* Linux Specific */
|
||||
#define __NR_sgetmask 199 /* Linux Specific */
|
||||
@ -234,7 +234,7 @@
|
||||
#define __NR_ipc 215 /* Linux Specific */
|
||||
#define __NR_sigreturn 216 /* Linux Specific */
|
||||
#define __NR_clone 217 /* Linux Specific */
|
||||
/* #define __NR_modify_ldt 218 Linux Specific - i386 specific, unused */
|
||||
#define __NR_ioprio_get 218 /* Linux Specific */
|
||||
#define __NR_adjtimex 219 /* Linux Specific */
|
||||
#define __NR_sigprocmask 220 /* Linux Specific */
|
||||
#define __NR_create_module 221 /* Linux Specific */
|
||||
|
@ -220,8 +220,8 @@ register struct thread_info *current_thread_info_reg asm("g6");
|
||||
#define TIF_NEWSIGNALS 6 /* wants new-style signals */
|
||||
#define TIF_32BIT 7 /* 32-bit binary */
|
||||
#define TIF_NEWCHILD 8 /* just-spawned child process */
|
||||
/* TIF_* value 9 is available */
|
||||
#define TIF_POLLING_NRFLAG 10
|
||||
#define TIF_SECCOMP 9 /* secure computing */
|
||||
#define TIF_SYSCALL_AUDIT 10 /* syscall auditing active */
|
||||
#define TIF_SYSCALL_SUCCESS 11
|
||||
/* NOTE: Thread flags >= 12 should be ones we have no interest
|
||||
* in using in assembly, else we can't use the mask as
|
||||
@ -229,6 +229,7 @@ register struct thread_info *current_thread_info_reg asm("g6");
|
||||
*/
|
||||
#define TIF_ABI_PENDING 12
|
||||
#define TIF_MEMDIE 13
|
||||
#define TIF_POLLING_NRFLAG 14
|
||||
|
||||
#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
|
||||
#define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME)
|
||||
@ -239,9 +240,11 @@ register struct thread_info *current_thread_info_reg asm("g6");
|
||||
#define _TIF_NEWSIGNALS (1<<TIF_NEWSIGNALS)
|
||||
#define _TIF_32BIT (1<<TIF_32BIT)
|
||||
#define _TIF_NEWCHILD (1<<TIF_NEWCHILD)
|
||||
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
|
||||
#define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING)
|
||||
#define _TIF_SECCOMP (1<<TIF_SECCOMP)
|
||||
#define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT)
|
||||
#define _TIF_SYSCALL_SUCCESS (1<<TIF_SYSCALL_SUCCESS)
|
||||
#define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING)
|
||||
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
|
||||
|
||||
#define _TIF_USER_WORK_MASK ((0xff << TI_FLAG_WSAVED_SHIFT) | \
|
||||
(_TIF_NOTIFY_RESUME | _TIF_SIGPENDING | \
|
||||
|
@ -212,7 +212,7 @@
|
||||
#define __NR_epoll_create 193 /* Linux Specific */
|
||||
#define __NR_epoll_ctl 194 /* Linux Specific */
|
||||
#define __NR_epoll_wait 195 /* Linux Specific */
|
||||
/* #define __NR_ulimit 196 Linux Specific */
|
||||
#define __NR_ioprio_set 196 /* Linux Specific */
|
||||
#define __NR_getppid 197 /* Linux Specific */
|
||||
#define __NR_sigaction 198 /* Linux Specific */
|
||||
#define __NR_sgetmask 199 /* Linux Specific */
|
||||
@ -234,7 +234,7 @@
|
||||
#define __NR_ipc 215 /* Linux Specific */
|
||||
#define __NR_sigreturn 216 /* Linux Specific */
|
||||
#define __NR_clone 217 /* Linux Specific */
|
||||
/* #define __NR_modify_ldt 218 Linux Specific - i386 specific, unused */
|
||||
#define __NR_ioprio_get 218 /* Linux Specific */
|
||||
#define __NR_adjtimex 219 /* Linux Specific */
|
||||
#define __NR_sigprocmask 220 /* Linux Specific */
|
||||
#define __NR_create_module 221 /* Linux Specific */
|
||||
|
@ -165,7 +165,7 @@
|
||||
#define AUDIT_ARCH_SH64 (EM_SH|__AUDIT_ARCH_64BIT)
|
||||
#define AUDIT_ARCH_SHEL64 (EM_SH|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
|
||||
#define AUDIT_ARCH_SPARC (EM_SPARC)
|
||||
#define AUDIT_ARCH_SPARC64 (EM_SPARC64|__AUDIT_ARCH_64BIT)
|
||||
#define AUDIT_ARCH_SPARC64 (EM_SPARCV9|__AUDIT_ARCH_64BIT)
|
||||
#define AUDIT_ARCH_V850 (EM_V850|__AUDIT_ARCH_LE)
|
||||
#define AUDIT_ARCH_X86_64 (EM_X86_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
#define SMP_CACHE_BYTES L1_CACHE_BYTES
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_X86
|
||||
#if defined(CONFIG_X86) || defined(CONFIG_SPARC64)
|
||||
#define __read_mostly __attribute__((__section__(".data.read_mostly")))
|
||||
#else
|
||||
#define __read_mostly
|
||||
|
@ -174,7 +174,7 @@ config AUDIT
|
||||
|
||||
config AUDITSYSCALL
|
||||
bool "Enable system-call auditing support"
|
||||
depends on AUDIT && (X86 || PPC || PPC64 || ARCH_S390 || IA64 || UML)
|
||||
depends on AUDIT && (X86 || PPC || PPC64 || ARCH_S390 || IA64 || UML || SPARC64)
|
||||
default y if SECURITY_SELINUX
|
||||
help
|
||||
Enable low-overhead system-call auditing infrastructure that
|
||||
|
Loading…
Reference in New Issue
Block a user