ARCH: AUDIT: implement syscall_get_arch for all arches
For all arches which support audit implement syscall_get_arch() They are all pretty easy and straight forward, stolen from how the call to audit_syscall_entry() determines the arch. Based-on-patch-by: Richard Briggs <rgb@redhat.com> Signed-off-by: Eric Paris <eparis@redhat.com> Cc: linux-ia64@vger.kernel.org Cc: microblaze-uclinux@itee.uq.edu.au Cc: linux-mips@linux-mips.org Cc: linux@lists.openrisc.net Cc: linux-parisc@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org Cc: sparclinux@vger.kernel.org
This commit is contained in:
		
					parent
					
						
							
								0451623ad7
							
						
					
				
			
			
				commit
				
					
						ce5d112827
					
				
			
		
					 8 changed files with 49 additions and 1 deletions
				
			
		|  | @ -13,6 +13,7 @@ | ||||||
| #ifndef _ASM_SYSCALL_H | #ifndef _ASM_SYSCALL_H | ||||||
| #define _ASM_SYSCALL_H	1 | #define _ASM_SYSCALL_H	1 | ||||||
| 
 | 
 | ||||||
|  | #include <uapi/linux/audit.h> | ||||||
| #include <linux/sched.h> | #include <linux/sched.h> | ||||||
| #include <linux/err.h> | #include <linux/err.h> | ||||||
| 
 | 
 | ||||||
|  | @ -79,4 +80,9 @@ static inline void syscall_set_arguments(struct task_struct *task, | ||||||
| 
 | 
 | ||||||
| 	ia64_syscall_get_set_arguments(task, regs, i, n, args, 1); | 	ia64_syscall_get_set_arguments(task, regs, i, n, args, 1); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | static inline int syscall_get_arch(void) | ||||||
|  | { | ||||||
|  | 	return AUDIT_ARCH_IA64; | ||||||
|  | } | ||||||
| #endif	/* _ASM_SYSCALL_H */ | #endif	/* _ASM_SYSCALL_H */ | ||||||
|  |  | ||||||
|  | @ -1,6 +1,7 @@ | ||||||
| #ifndef __ASM_MICROBLAZE_SYSCALL_H | #ifndef __ASM_MICROBLAZE_SYSCALL_H | ||||||
| #define __ASM_MICROBLAZE_SYSCALL_H | #define __ASM_MICROBLAZE_SYSCALL_H | ||||||
| 
 | 
 | ||||||
|  | #include <uapi/linux/audit.h> | ||||||
| #include <linux/kernel.h> | #include <linux/kernel.h> | ||||||
| #include <linux/sched.h> | #include <linux/sched.h> | ||||||
| #include <asm/ptrace.h> | #include <asm/ptrace.h> | ||||||
|  | @ -99,4 +100,8 @@ static inline void syscall_set_arguments(struct task_struct *task, | ||||||
| asmlinkage long do_syscall_trace_enter(struct pt_regs *regs); | asmlinkage long do_syscall_trace_enter(struct pt_regs *regs); | ||||||
| asmlinkage void do_syscall_trace_leave(struct pt_regs *regs); | asmlinkage void do_syscall_trace_leave(struct pt_regs *regs); | ||||||
| 
 | 
 | ||||||
|  | static inline int syscall_get_arch(void) | ||||||
|  | { | ||||||
|  | 	return AUDIT_ARCH_MICROBLAZE; | ||||||
|  | } | ||||||
| #endif /* __ASM_MICROBLAZE_SYSCALL_H */ | #endif /* __ASM_MICROBLAZE_SYSCALL_H */ | ||||||
|  |  | ||||||
|  | @ -129,7 +129,7 @@ extern const unsigned long sysn32_call_table[]; | ||||||
| 
 | 
 | ||||||
| static inline int syscall_get_arch(void) | static inline int syscall_get_arch(void) | ||||||
| { | { | ||||||
| 	int arch = EM_MIPS; | 	int arch = AUDIT_ARCH_MIPS; | ||||||
| #ifdef CONFIG_64BIT | #ifdef CONFIG_64BIT | ||||||
| 	if (!test_thread_flag(TIF_32BIT_REGS)) | 	if (!test_thread_flag(TIF_32BIT_REGS)) | ||||||
| 		arch |= __AUDIT_ARCH_64BIT; | 		arch |= __AUDIT_ARCH_64BIT; | ||||||
|  |  | ||||||
|  | @ -19,6 +19,7 @@ | ||||||
| #ifndef __ASM_OPENRISC_SYSCALL_H__ | #ifndef __ASM_OPENRISC_SYSCALL_H__ | ||||||
| #define __ASM_OPENRISC_SYSCALL_H__ | #define __ASM_OPENRISC_SYSCALL_H__ | ||||||
| 
 | 
 | ||||||
|  | #include <uapi/linux/audit.h> | ||||||
| #include <linux/err.h> | #include <linux/err.h> | ||||||
| #include <linux/sched.h> | #include <linux/sched.h> | ||||||
| 
 | 
 | ||||||
|  | @ -71,4 +72,8 @@ syscall_set_arguments(struct task_struct *task, struct pt_regs *regs, | ||||||
| 	memcpy(®s->gpr[3 + i], args, n * sizeof(args[0])); | 	memcpy(®s->gpr[3 + i], args, n * sizeof(args[0])); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static inline int syscall_get_arch(void) | ||||||
|  | { | ||||||
|  | 	return AUDIT_ARCH_OPENRISC; | ||||||
|  | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -3,6 +3,8 @@ | ||||||
| #ifndef _ASM_PARISC_SYSCALL_H_ | #ifndef _ASM_PARISC_SYSCALL_H_ | ||||||
| #define _ASM_PARISC_SYSCALL_H_ | #define _ASM_PARISC_SYSCALL_H_ | ||||||
| 
 | 
 | ||||||
|  | #include <uapi/linux/audit.h> | ||||||
|  | #include <linux/compat.h> | ||||||
| #include <linux/err.h> | #include <linux/err.h> | ||||||
| #include <asm/ptrace.h> | #include <asm/ptrace.h> | ||||||
| 
 | 
 | ||||||
|  | @ -37,4 +39,13 @@ static inline void syscall_get_arguments(struct task_struct *tsk, | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static inline int syscall_get_arch(void) | ||||||
|  | { | ||||||
|  | 	int arch = AUDIT_ARCH_PARISC; | ||||||
|  | #ifdef CONFIG_64BIT | ||||||
|  | 	if (!is_compat_task()) | ||||||
|  | 		arch = AUDIT_ARCH_PARISC64; | ||||||
|  | #endif | ||||||
|  | 	return arch; | ||||||
|  | } | ||||||
| #endif /*_ASM_PARISC_SYSCALL_H_*/ | #endif /*_ASM_PARISC_SYSCALL_H_*/ | ||||||
|  |  | ||||||
|  | @ -13,6 +13,8 @@ | ||||||
| #ifndef _ASM_SYSCALL_H | #ifndef _ASM_SYSCALL_H | ||||||
| #define _ASM_SYSCALL_H	1 | #define _ASM_SYSCALL_H	1 | ||||||
| 
 | 
 | ||||||
|  | #include <uapi/linux/audit.h> | ||||||
|  | #include <linux/compat.h> | ||||||
| #include <linux/sched.h> | #include <linux/sched.h> | ||||||
| 
 | 
 | ||||||
| /* ftrace syscalls requires exporting the sys_call_table */ | /* ftrace syscalls requires exporting the sys_call_table */ | ||||||
|  | @ -86,4 +88,14 @@ static inline void syscall_set_arguments(struct task_struct *task, | ||||||
| 	memcpy(®s->gpr[3 + i], args, n * sizeof(args[0])); | 	memcpy(®s->gpr[3 + i], args, n * sizeof(args[0])); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static inline int syscall_get_arch(void) | ||||||
|  | { | ||||||
|  | 	int arch = AUDIT_ARCH_PPC; | ||||||
|  | 
 | ||||||
|  | #ifdef CONFIG_PPC64 | ||||||
|  | 	if (!is_32bit_task()) | ||||||
|  | 		arch = AUDIT_ARCH_PPC64; | ||||||
|  | #endif | ||||||
|  | 	return arch; | ||||||
|  | } | ||||||
| #endif	/* _ASM_SYSCALL_H */ | #endif	/* _ASM_SYSCALL_H */ | ||||||
|  |  | ||||||
|  | @ -1,9 +1,11 @@ | ||||||
| #ifndef __ASM_SPARC_SYSCALL_H | #ifndef __ASM_SPARC_SYSCALL_H | ||||||
| #define __ASM_SPARC_SYSCALL_H | #define __ASM_SPARC_SYSCALL_H | ||||||
| 
 | 
 | ||||||
|  | #include <uapi/linux/audit.h> | ||||||
| #include <linux/kernel.h> | #include <linux/kernel.h> | ||||||
| #include <linux/sched.h> | #include <linux/sched.h> | ||||||
| #include <asm/ptrace.h> | #include <asm/ptrace.h> | ||||||
|  | #include <asm/thread_info.h> | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * The syscall table always contains 32 bit pointers since we know that the |  * The syscall table always contains 32 bit pointers since we know that the | ||||||
|  | @ -124,4 +126,10 @@ static inline void syscall_set_arguments(struct task_struct *task, | ||||||
| 		regs->u_regs[UREG_I0 + i + j] = args[j]; | 		regs->u_regs[UREG_I0 + i + j] = args[j]; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static inline int syscall_get_arch(void) | ||||||
|  | { | ||||||
|  | 	return test_thread_flag(TIF_32BIT) ? AUDIT_ARCH_SPARC | ||||||
|  | 					   : AUDIT_ARCH_SPARC64; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #endif /* __ASM_SPARC_SYSCALL_H */ | #endif /* __ASM_SPARC_SYSCALL_H */ | ||||||
|  |  | ||||||
|  | @ -351,6 +351,7 @@ enum { | ||||||
| #define AUDIT_ARCH_IA64		(EM_IA_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE) | #define AUDIT_ARCH_IA64		(EM_IA_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE) | ||||||
| #define AUDIT_ARCH_M32R		(EM_M32R) | #define AUDIT_ARCH_M32R		(EM_M32R) | ||||||
| #define AUDIT_ARCH_M68K		(EM_68K) | #define AUDIT_ARCH_M68K		(EM_68K) | ||||||
|  | #define AUDIT_ARCH_MICROBLAZE	(EM_MICROBLAZE) | ||||||
| #define AUDIT_ARCH_MIPS		(EM_MIPS) | #define AUDIT_ARCH_MIPS		(EM_MIPS) | ||||||
| #define AUDIT_ARCH_MIPSEL	(EM_MIPS|__AUDIT_ARCH_LE) | #define AUDIT_ARCH_MIPSEL	(EM_MIPS|__AUDIT_ARCH_LE) | ||||||
| #define AUDIT_ARCH_MIPS64	(EM_MIPS|__AUDIT_ARCH_64BIT) | #define AUDIT_ARCH_MIPS64	(EM_MIPS|__AUDIT_ARCH_64BIT) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Eric Paris
				Eric Paris