Loading arch/powerpc/Kconfig +0 −1 Original line number Diff line number Diff line Loading @@ -249,7 +249,6 @@ config PPC select PCI_SYSCALL if PCI select PPC_DAWR if PPC64 select RTC_LIB select SET_FS select SPARSE_IRQ select SYSCTL_EXCEPTION_TRACE select THREAD_INFO_IN_TASK Loading arch/powerpc/include/asm/processor.h +0 −7 Original line number Diff line number Diff line Loading @@ -83,10 +83,6 @@ struct task_struct; void start_thread(struct pt_regs *regs, unsigned long fdptr, unsigned long sp); void release_thread(struct task_struct *); typedef struct { unsigned long seg; } mm_segment_t; #define TS_FPR(i) fp_state.fpr[i][TS_FPROFFSET] #define TS_CKFPR(i) ckfp_state.fpr[i][TS_FPROFFSET] Loading Loading @@ -148,7 +144,6 @@ struct thread_struct { unsigned long ksp_vsid; #endif struct pt_regs *regs; /* Pointer to saved register state */ mm_segment_t addr_limit; /* for get_fs() validation */ #ifdef CONFIG_BOOKE /* BookE base exception scratch space; align on cacheline */ unsigned long normsave[8] ____cacheline_aligned; Loading Loading @@ -295,7 +290,6 @@ struct thread_struct { #define INIT_THREAD { \ .ksp = INIT_SP, \ .ksp_limit = INIT_SP_LIMIT, \ .addr_limit = KERNEL_DS, \ .pgdir = swapper_pg_dir, \ .fpexc_mode = MSR_FE0 | MSR_FE1, \ SPEFSCR_INIT \ Loading @@ -303,7 +297,6 @@ struct thread_struct { #else #define INIT_THREAD { \ .ksp = INIT_SP, \ .addr_limit = KERNEL_DS, \ .fpexc_mode = 0, \ } #endif Loading arch/powerpc/include/asm/thread_info.h +1 −4 Original line number Diff line number Diff line Loading @@ -90,7 +90,6 @@ void arch_setup_new_exec(void); #define TIF_SYSCALL_TRACE 0 /* syscall trace active */ #define TIF_SIGPENDING 1 /* signal pending */ #define TIF_NEED_RESCHED 2 /* rescheduling necessary */ #define TIF_FSCHECK 3 /* Check FS is USER_DS on return */ #define TIF_SYSCALL_EMU 4 /* syscall emulation active */ #define TIF_RESTORE_TM 5 /* need to restore TM FP/VEC/VSX */ #define TIF_PATCH_PENDING 6 /* pending live patching update */ Loading Loading @@ -130,7 +129,6 @@ void arch_setup_new_exec(void); #define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT) #define _TIF_EMULATE_STACK_STORE (1<<TIF_EMULATE_STACK_STORE) #define _TIF_NOHZ (1<<TIF_NOHZ) #define _TIF_FSCHECK (1<<TIF_FSCHECK) #define _TIF_SYSCALL_EMU (1<<TIF_SYSCALL_EMU) #define _TIF_SYSCALL_DOTRACE (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | \ _TIF_SECCOMP | _TIF_SYSCALL_TRACEPOINT | \ Loading @@ -138,8 +136,7 @@ void arch_setup_new_exec(void); #define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | _TIF_NEED_RESCHED | \ _TIF_NOTIFY_RESUME | _TIF_UPROBE | \ _TIF_RESTORE_TM | _TIF_PATCH_PENDING | \ _TIF_FSCHECK) _TIF_RESTORE_TM | _TIF_PATCH_PENDING) #define _TIF_PERSYSCALL_MASK (_TIF_RESTOREALL|_TIF_NOERROR) /* Bits in local_flags */ Loading arch/powerpc/include/asm/uaccess.h +5 −46 Original line number Diff line number Diff line Loading @@ -8,62 +8,21 @@ #include <asm/extable.h> #include <asm/kup.h> /* * The fs value determines whether argument validity checking should be * performed or not. If get_fs() == USER_DS, checking is performed, with * get_fs() == KERNEL_DS, checking is bypassed. * * For historical reasons, these macros are grossly misnamed. * * The fs/ds values are now the highest legal address in the "segment". * This simplifies the checking in the routines below. */ #define MAKE_MM_SEG(s) ((mm_segment_t) { (s) }) #define KERNEL_DS MAKE_MM_SEG(~0UL) #ifdef __powerpc64__ /* We use TASK_SIZE_USER64 as TASK_SIZE is not constant */ #define USER_DS MAKE_MM_SEG(TASK_SIZE_USER64 - 1) #define TASK_SIZE_MAX TASK_SIZE_USER64 #else #define USER_DS MAKE_MM_SEG(TASK_SIZE - 1) #define TASK_SIZE_MAX TASK_SIZE #endif #define get_fs() (current->thread.addr_limit) static inline void set_fs(mm_segment_t fs) { current->thread.addr_limit = fs; /* On user-mode return check addr_limit (fs) is correct */ set_thread_flag(TIF_FSCHECK); } #define uaccess_kernel() (get_fs().seg == KERNEL_DS.seg) #define user_addr_max() (get_fs().seg) #ifdef __powerpc64__ /* * This check is sufficient because there is a large enough * gap between user addresses and the kernel addresses */ #define __access_ok(addr, size, segment) \ (((addr) <= (segment).seg) && ((size) <= (segment).seg)) #else static inline int __access_ok(unsigned long addr, unsigned long size, mm_segment_t seg) static inline bool __access_ok(unsigned long addr, unsigned long size) { if (addr > seg.seg) return 0; return (size == 0 || size - 1 <= seg.seg - addr); return addr < TASK_SIZE_MAX && size <= TASK_SIZE_MAX - addr; } #endif #define access_ok(addr, size) \ (__chk_user_ptr(addr), \ __access_ok((__force unsigned long)(addr), (size), get_fs())) __access_ok((unsigned long)(addr), (size))) /* * These are the main single-value transfer routines. They automatically Loading arch/powerpc/kernel/signal.c +0 −3 Original line number Diff line number Diff line Loading @@ -312,9 +312,6 @@ void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags) { user_exit(); /* Check valid addr_limit, TIF check is done there */ addr_limit_user_check(); if (thread_info_flags & _TIF_UPROBE) uprobe_notify_resume(regs); Loading Loading
arch/powerpc/Kconfig +0 −1 Original line number Diff line number Diff line Loading @@ -249,7 +249,6 @@ config PPC select PCI_SYSCALL if PCI select PPC_DAWR if PPC64 select RTC_LIB select SET_FS select SPARSE_IRQ select SYSCTL_EXCEPTION_TRACE select THREAD_INFO_IN_TASK Loading
arch/powerpc/include/asm/processor.h +0 −7 Original line number Diff line number Diff line Loading @@ -83,10 +83,6 @@ struct task_struct; void start_thread(struct pt_regs *regs, unsigned long fdptr, unsigned long sp); void release_thread(struct task_struct *); typedef struct { unsigned long seg; } mm_segment_t; #define TS_FPR(i) fp_state.fpr[i][TS_FPROFFSET] #define TS_CKFPR(i) ckfp_state.fpr[i][TS_FPROFFSET] Loading Loading @@ -148,7 +144,6 @@ struct thread_struct { unsigned long ksp_vsid; #endif struct pt_regs *regs; /* Pointer to saved register state */ mm_segment_t addr_limit; /* for get_fs() validation */ #ifdef CONFIG_BOOKE /* BookE base exception scratch space; align on cacheline */ unsigned long normsave[8] ____cacheline_aligned; Loading Loading @@ -295,7 +290,6 @@ struct thread_struct { #define INIT_THREAD { \ .ksp = INIT_SP, \ .ksp_limit = INIT_SP_LIMIT, \ .addr_limit = KERNEL_DS, \ .pgdir = swapper_pg_dir, \ .fpexc_mode = MSR_FE0 | MSR_FE1, \ SPEFSCR_INIT \ Loading @@ -303,7 +297,6 @@ struct thread_struct { #else #define INIT_THREAD { \ .ksp = INIT_SP, \ .addr_limit = KERNEL_DS, \ .fpexc_mode = 0, \ } #endif Loading
arch/powerpc/include/asm/thread_info.h +1 −4 Original line number Diff line number Diff line Loading @@ -90,7 +90,6 @@ void arch_setup_new_exec(void); #define TIF_SYSCALL_TRACE 0 /* syscall trace active */ #define TIF_SIGPENDING 1 /* signal pending */ #define TIF_NEED_RESCHED 2 /* rescheduling necessary */ #define TIF_FSCHECK 3 /* Check FS is USER_DS on return */ #define TIF_SYSCALL_EMU 4 /* syscall emulation active */ #define TIF_RESTORE_TM 5 /* need to restore TM FP/VEC/VSX */ #define TIF_PATCH_PENDING 6 /* pending live patching update */ Loading Loading @@ -130,7 +129,6 @@ void arch_setup_new_exec(void); #define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT) #define _TIF_EMULATE_STACK_STORE (1<<TIF_EMULATE_STACK_STORE) #define _TIF_NOHZ (1<<TIF_NOHZ) #define _TIF_FSCHECK (1<<TIF_FSCHECK) #define _TIF_SYSCALL_EMU (1<<TIF_SYSCALL_EMU) #define _TIF_SYSCALL_DOTRACE (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | \ _TIF_SECCOMP | _TIF_SYSCALL_TRACEPOINT | \ Loading @@ -138,8 +136,7 @@ void arch_setup_new_exec(void); #define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | _TIF_NEED_RESCHED | \ _TIF_NOTIFY_RESUME | _TIF_UPROBE | \ _TIF_RESTORE_TM | _TIF_PATCH_PENDING | \ _TIF_FSCHECK) _TIF_RESTORE_TM | _TIF_PATCH_PENDING) #define _TIF_PERSYSCALL_MASK (_TIF_RESTOREALL|_TIF_NOERROR) /* Bits in local_flags */ Loading
arch/powerpc/include/asm/uaccess.h +5 −46 Original line number Diff line number Diff line Loading @@ -8,62 +8,21 @@ #include <asm/extable.h> #include <asm/kup.h> /* * The fs value determines whether argument validity checking should be * performed or not. If get_fs() == USER_DS, checking is performed, with * get_fs() == KERNEL_DS, checking is bypassed. * * For historical reasons, these macros are grossly misnamed. * * The fs/ds values are now the highest legal address in the "segment". * This simplifies the checking in the routines below. */ #define MAKE_MM_SEG(s) ((mm_segment_t) { (s) }) #define KERNEL_DS MAKE_MM_SEG(~0UL) #ifdef __powerpc64__ /* We use TASK_SIZE_USER64 as TASK_SIZE is not constant */ #define USER_DS MAKE_MM_SEG(TASK_SIZE_USER64 - 1) #define TASK_SIZE_MAX TASK_SIZE_USER64 #else #define USER_DS MAKE_MM_SEG(TASK_SIZE - 1) #define TASK_SIZE_MAX TASK_SIZE #endif #define get_fs() (current->thread.addr_limit) static inline void set_fs(mm_segment_t fs) { current->thread.addr_limit = fs; /* On user-mode return check addr_limit (fs) is correct */ set_thread_flag(TIF_FSCHECK); } #define uaccess_kernel() (get_fs().seg == KERNEL_DS.seg) #define user_addr_max() (get_fs().seg) #ifdef __powerpc64__ /* * This check is sufficient because there is a large enough * gap between user addresses and the kernel addresses */ #define __access_ok(addr, size, segment) \ (((addr) <= (segment).seg) && ((size) <= (segment).seg)) #else static inline int __access_ok(unsigned long addr, unsigned long size, mm_segment_t seg) static inline bool __access_ok(unsigned long addr, unsigned long size) { if (addr > seg.seg) return 0; return (size == 0 || size - 1 <= seg.seg - addr); return addr < TASK_SIZE_MAX && size <= TASK_SIZE_MAX - addr; } #endif #define access_ok(addr, size) \ (__chk_user_ptr(addr), \ __access_ok((__force unsigned long)(addr), (size), get_fs())) __access_ok((unsigned long)(addr), (size))) /* * These are the main single-value transfer routines. They automatically Loading
arch/powerpc/kernel/signal.c +0 −3 Original line number Diff line number Diff line Loading @@ -312,9 +312,6 @@ void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags) { user_exit(); /* Check valid addr_limit, TIF check is done there */ addr_limit_user_check(); if (thread_info_flags & _TIF_UPROBE) uprobe_notify_resume(regs); Loading