x86: Last of trivial fault_32|64.c unification
PATCH 1/2 x86: Last of trivial fault_32|64.c unification
Comments, indentation, printk format.
Uses task_pid_nr() on X86_64 now, but this is always defined to task->pid.
Signed-off-by Harvey Harrison <[email protected]>
--- arch/x86/mm/fault_32.c | 20 ++++++++++++-------- arch/x86/mm/fault_64.c | 29 +++++++++++++++++++---------- 2 files changed, 31 insertions(+), 18 deletions(-)
arch/x86/mm/fault_32.c +12 -8
@@ -36,10 +36,10 @@* bit 3 == 1 means use of reserved bit detected * bit 4 == 1 means fault was an instruction fetch */ -#define PF_PROT (1<<0) +#define PF_PROT (1<<0)#define PF_WRITE (1<<1) -#define PF_USER (1<<2) -#define PF_RSVD (1<<3) +#define PF_USER (1<<2) +#define PF_RSVD (1<<3)#define PF_INSTR (1<<4)static inline int notify_page_fault (struct pt_regs *regs)
@@ -477,11 +477,15 @@ bad_area_nosemaphore:if (show_unhandled_signals &&unhandled_signal (tsk,SIGSEGV ) &&printk_ratelimit ()) { -printk ("%s%s[%d]: segfault at %08lx ip %08lx " -"sp %08lx error %lx\n" , -task_pid_nr (tsk) >1 ?KERN_INFO :KERN_EMERG , - tsk->comm,task_pid_nr (tsk), address, regs->ip, - regs->sp, error_code); + printk( +#ifdef CONFIG_X86_32 +"%s%s[%d]: segfault at %08lx ip %08lx sp %08lx error %lx\n" , +#else +"%s%s[%d]: segfault at %lx ip %lx sp %lx error %lx\n" , +#endif +task_pid_nr (tsk) >1 ?KERN_INFO :KERN_EMERG , + tsk->comm,task_pid_nr (tsk), address, regs->ip, + regs->sp, error_code); } tsk->thread.cr2 = address;/* Kernel addresses are always protection faults */
arch/x86/mm/fault_64.c +19 -10
@@ -454,8 +454,11 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,if (!(vma->vm_flags &VM_GROWSDOWN )) goto bad_area;if (error_code &PF_USER ) { -/* Allow userspace just enough access below the stack pointer -* to let the 'enter' instruction work. +/* +* Accessing the stack below %sp is always a bug. +* The large cushion allows instructions like enter +* and pusha to work. ("enter $65535,$31" pushes +* 32 pointers and then decrements %sp by 65535.) */ if (address +65536 +32 *sizeof (unsigned long ) < regs->sp) goto bad_area;
@@ -540,10 +543,14 @@ bad_area_nosemaphore:if (show_unhandled_signals &&unhandled_signal (tsk,SIGSEGV ) &&printk_ratelimit ()) { printk( -"%s%s[%d]: segfault at %lx ip %lx sp %lx error %lx\n" , - tsk->pid >1 ?KERN_INFO :KERN_EMERG , - tsk->comm, tsk->pid, address, regs->ip, - regs->sp, error_code); +#ifdef CONFIG_X86_32 +"%s%s[%d]: segfault at %08lx ip %08lx sp %08lx error %lx\n" , +#else +"%s%s[%d]: segfault at %lx ip %lx sp %lx error %lx\n" , +#endif +task_pid_nr (tsk) >1 ?KERN_INFO :KERN_EMERG , + tsk->comm,task_pid_nr (tsk), address, regs->ip, + regs->sp, error_code); } tsk->thread.cr2 = address;
@@ -627,10 +634,12 @@ LIST_HEAD(pgd_list);void vmalloc_sync_all (void ) { -/* Note that races in the updates of insync and start aren't -problematic: -insync can only get set bits added, and updates to start are only -improving performance (without affecting correctness if undone). */ +/* +* Note that races in the updates of insync and start aren't +* problematic: insync can only get set bits added, and updates to +* start are only improving performance (without affecting correctness +* if undone). +*/ static DECLARE_BITMAP(insync, PTRS_PER_PGD);static unsigned long start =VMALLOC_START &PGDIR_MASK ;unsigned long address;
Signature · 1 line
1.5.4.rc2.1164.g6451