User: | Jiri Slaby |
Error type: | Double Unlock |
Error type description: | Some lock is unlocked twice unintentionally in a sequence |
File location: | arch/x86/mm/fault.c |
Line in file: | 777 |
Project: | Linux Kernel |
Project version: | 2.6.28 |
Tools: |
Smatch
(1.59)
|
Entered: | 2013-09-10 15:16:58 UTC |
747 tsk->maj_flt++; 748 else 749 tsk->min_flt++; 750 751#ifdef CONFIG_X86_32 752 /* 753 * Did it hit the DOS screen memory VA from vm86 mode? 754 */ 755 if (v8086_mode(regs)) { 756 unsigned long bit = (address - 0xA0000) >> PAGE_SHIFT; 757 if (bit < 32) 758 tsk->thread.screen_bitmap |= 1 << bit; 759 } 760#endif 761 up_read(&mm->mmap_sem); 762 return; 763 764/* 765 * Something tried to access memory that isn't in our memory map.. 766 * Fix it, but check if it's kernel or user first.. 767 */ 768bad_area: 769 up_read(&mm->mmap_sem); 770 771bad_area_nosemaphore: 772 /* User mode accesses just cause a SIGSEGV */ 773 if (error_code & PF_USER) { 774 /* 775 * It's possible to have interrupts off here. 776 */ 777 local_irq_enable(); 778 779 /* 780 * Valid to do another page fault here because this one came 781 * from user space. 782 */ 783 if (is_prefetch(regs, address, error_code)) 784 return; 785 786 if (is_errata100(regs, address)) 787 return;