lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:	Sat, 14 Aug 2010 16:29:48 +0200
From:	Bruno Prémont <bonbons@...ux-vserver.org>
To:	Thomas Gleixner <tglx@...utronix.de>,
	Ingo Molnar <mingo@...hat.com>,
	"H. Peter Anvin" <hpa@...or.com>,
	Andrew Morton <akpm@...ux-foundation.org>,
	Cesar Eduardo Barros <cesarb@...arb.net>,
	Avi Kivity <avi@...hat.com>
Cc:	x86@...nel.org, linux-kernel@...r.kernel.org
Subject: 2.6.36-git: BUG in highmem_32.c:45 causing scheduling while atomic

On 2.6.36-git at commit 92fa5bd9a946b6e7aab6764e7312e4e3d9bed295 (with
a few DRM/KMS branches merged on top) I have seen the following BUG:

[    5.764691] BUG: scheduling while atomic: udevd/848/0x10000001
[    5.764700] Modules linked in: ac97_bus snd_pcm snd_timer nsc_ircc snd irda ehci_hcd snd_page_alloc pcspkr uhci_hcd i2c_i801 usbcore crc_ccitt
[    5.764736] Pid: 848, comm: udevd Not tainted 2.6.35-08069-geb0c3f9 #34
[    5.764743] Call Trace:
[    5.764764]  [<c1301440>] ? printk+0x18/0x20
[    5.764778]  [<c10271d8>] __schedule_bug+0x58/0x60
[    5.764788]  [<c13019a8>] schedule+0x448/0x4f0
[    5.764799]  [<c102a446>] __cond_resched+0x16/0x30
[    5.764809]  [<c1301af5>] _cond_resched+0x25/0x30
[    5.764820]  [<c1083c67>] anon_vma_prepare+0x17/0xd0
[    5.764834]  [<c1080498>] expand_downwards+0x18/0x140
[    5.764846]  [<c10805c8>] expand_stack+0x8/0x10
[    5.764856]  [<c107e18f>] handle_mm_fault+0x78f/0x7c0
[    5.764869]  [<c107e2b9>] __get_user_pages+0xf9/0x360
[    5.764880]  [<c107e5bf>] get_user_pages+0x4f/0x60
[    5.764893]  [<c109615b>] get_arg_page+0x4b/0xa0
[    5.764907]  [<c1128ff6>] ? strnlen_user+0x26/0x50
[    5.764917]  [<c1096279>] copy_strings+0xc9/0x190
[    5.764929]  [<c1096364>] copy_strings_kernel+0x24/0x40
[    5.764939]  [<c1097742>] do_execve+0x172/0x240
[    5.764954]  [<c100950d>] sys_execve+0x2d/0x70
[    5.764963]  [<c1002bf2>] ptregs_execve+0x12/0x18
[    5.764973]  [<c1002b90>] ? sysenter_do_call+0x12/0x26
[    5.765011] ------------[ cut here ]------------
[    5.770014] kernel BUG at /usr/src/linux-2.6/arch/x86/mm/highmem_32.c:45!
[    5.770014] invalid opcode: 0000 [#1] 
[    5.770014] last sysfs file: /sys/devices/pci0000:00/0000:00:1f.1/host0/target0:0:0/0:0:0:0/block/sda/uevent
[    5.770014] Modules linked in: ac97_bus snd_pcm snd_timer nsc_ircc snd irda ehci_hcd snd_page_alloc pcspkr uhci_hcd i2c_i801 usbcore crc_ccitt
[    5.770014] 
[    5.770014] Pid: 846, comm: irda-setup Not tainted 2.6.35-08069-geb0c3f9 #34 TravelMate 660/TravelMate 660
[    5.770014] EIP: 0060:[<c102464e>] EFLAGS: 00010206 CPU: 0
[    5.770014] EIP is at kmap_atomic_prot+0xbe/0xd0
[    5.770014] EAX: c24bcda0 EBX: c14b6ecc ECX: 00000163 EDX: 00000007
[    5.770014] ESI: 7dbe8163 EDI: c14b6ee8 EBP: f6992e48 ESP: f6992e38
[    5.770014]  DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068
[    5.770014] Process irda-setup (pid: 846, ti=f6992000 task=f688aec0 task.ti=f6992000)
[    5.770014] Stack:
[    5.770014]  fffff000 00000017 bfffffed f6993bfc f6992e50 c102466e f6992e94 c107da72
[    5.770014] <0> 00000080 00000000 f68d3480 00000000 00000000 c1317b40 f70db280 f6993bfc
[    5.770014] <0> f69b8058 bffff000 f683a8c0 00000017 00000017 f69b8058 bfffffed f6992ed0
[    5.770014] Call Trace:
[    5.770014]  [<c102466e>] ? kmap_atomic+0xe/0x10
[    5.770014]  [<c107da72>] ? handle_mm_fault+0x72/0x7c0
[    5.770014]  [<c107e2b9>] ? __get_user_pages+0xf9/0x360
[    5.770014]  [<c107e5bf>] ? get_user_pages+0x4f/0x60
[    5.770014]  [<c109615b>] ? get_arg_page+0x4b/0xa0
[    5.770014]  [<c1128ff6>] ? strnlen_user+0x26/0x50
[    5.770014]  [<c1096279>] ? copy_strings+0xc9/0x190
[    5.770014]  [<c1096364>] ? copy_strings_kernel+0x24/0x40
[    5.770014]  [<c1097742>] ? do_execve+0x172/0x240
[    5.770014]  [<c100950d>] ? sys_execve+0x2d/0x70
[    5.770014]  [<c1002bf2>] ? ptregs_execve+0x12/0x18
[    5.770014]  [<c1002b90>] ? sysenter_do_call+0x12/0x26
[    5.770014] Code: 8b 3d e0 be 51 c1 89 ce 74 08 8b 0d 3c f5 45 c1 21 ce 29 f8 83 c2 45 c1 f8 05 c1 e0 0c 09 f0 89 03 c1 e2 0c 8b 45 f0 29 d0 eb 8a <0f> 0b eb fe 8d b4 26 00 00 00 00 8d bc 27 00 00 00 00 8b 0d 04 
[    5.770014] EIP: [<c102464e>] kmap_atomic_prot+0xbe/0xd0 SS:ESP 0068:f6992e38
[    5.983467] ---[ end trace 3a8cbdf92d372161 ]---

(and a few more, often with the BUG() at highmem_32.c).
That all happened during udev run at early userspace startup, hitting
either udev itself or helper binaries like modprobe.


Looking at highmem32.c, around line 45 I have:

30: void *kmap_atomic_prot(struct page *page, enum km_type type, pgprot_t prot)
31: {
32:         enum fixed_addresses idx;
33:         unsigned long vaddr;
34: 
35:         /* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */
36:         pagefault_disable();
37: 
38:         if (!PageHighMem(page))
39:                 return page_address(page);
40: 
41:         debug_kmap_atomic(type);
42: 
43:         idx = type + KM_TYPE_NR*smp_processor_id();
44:         vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
45:         BUG_ON(!pte_none(*(kmap_pte-idx)));
46:         set_pte(kmap_pte-idx, mk_pte(page, prot));
47: 
48:         return (void *)vaddr;
49: }


Config extract (whole config and dmesg available on demand):
#
# Processor type and features
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
# CONFIG_SMP is not set
# CONFIG_SPARSE_IRQ is not set
# CONFIG_X86_MPPARSE is not set
# CONFIG_X86_EXTENDED_PLATFORM is not set
CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y
CONFIG_SCHED_OMIT_FRAME_POINTER=y
# CONFIG_PARAVIRT_GUEST is not set
CONFIG_NO_BOOTMEM=y
# CONFIG_MEMTEST is not set
# CONFIG_M386 is not set
...
CONFIG_MPENTIUMM=y
...
# CONFIG_X86_GENERIC is not set
CONFIG_X86_CPU=y
CONFIG_X86_INTERNODE_CACHE_SHIFT=6
CONFIG_X86_CMPXCHG=y
CONFIG_X86_L1_CACHE_SHIFT=6
CONFIG_X86_XADD=y
CONFIG_X86_WP_WORKS_OK=y
CONFIG_X86_INVLPG=y
CONFIG_X86_BSWAP=y
CONFIG_X86_POPAD_OK=y
CONFIG_X86_INTEL_USERCOPY=y
CONFIG_X86_USE_PPRO_CHECKSUM=y
CONFIG_X86_TSC=y
CONFIG_X86_CMPXCHG64=y
CONFIG_X86_CMOV=y
CONFIG_X86_MINIMUM_CPU_FAMILY=5
CONFIG_X86_DEBUGCTLMSR=y
CONFIG_CPU_SUP_INTEL=y
CONFIG_CPU_SUP_CYRIX_32=y
CONFIG_CPU_SUP_AMD=y
CONFIG_CPU_SUP_CENTAUR=y
CONFIG_CPU_SUP_TRANSMETA_32=y
CONFIG_CPU_SUP_UMC_32=y
CONFIG_HPET_TIMER=y
CONFIG_HPET_EMULATE_RTC=y
CONFIG_DMI=y
# CONFIG_IOMMU_HELPER is not set
# CONFIG_IOMMU_API is not set
CONFIG_NR_CPUS=1
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not set
CONFIG_X86_UP_APIC=y
CONFIG_X86_UP_IOAPIC=y
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
# CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set
CONFIG_X86_MCE=y
CONFIG_X86_MCE_INTEL=y
# CONFIG_X86_MCE_AMD is not set
# CONFIG_X86_ANCIENT_MCE is not set
CONFIG_X86_MCE_THRESHOLD=y
# CONFIG_X86_MCE_INJECT is not set
CONFIG_X86_THERMAL_VECTOR=y
CONFIG_VM86=y
# CONFIG_TOSHIBA is not set
# CONFIG_I8K is not set
# CONFIG_X86_REBOOTFIXUPS is not set
CONFIG_MICROCODE=m
CONFIG_MICROCODE_INTEL=y
# CONFIG_MICROCODE_AMD is not set
CONFIG_MICROCODE_OLD_INTERFACE=y
CONFIG_X86_MSR=m
CONFIG_X86_CPUID=m
# CONFIG_NOHIGHMEM is not set
CONFIG_HIGHMEM4G=y
# CONFIG_HIGHMEM64G is not set
CONFIG_PAGE_OFFSET=0xC0000000
CONFIG_HIGHMEM=y
# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
CONFIG_ARCH_FLATMEM_ENABLE=y
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
CONFIG_ILLEGAL_POINTER_VALUE=0
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
# CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_SPARSEMEM_STATIC=y
CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_PHYS_ADDR_T_64BIT is not set
CONFIG_ZONE_DMA_FLAG=1
CONFIG_BOUNCE=y
CONFIG_VIRT_TO_BUS=y
# CONFIG_KSM is not set
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y
# CONFIG_MEMORY_FAILURE is not set
CONFIG_HIGHPTE=y
CONFIG_X86_CHECK_BIOS_CORRUPTION=y
CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
CONFIG_X86_RESERVE_LOW_64K=y
# CONFIG_MATH_EMULATION is not set
CONFIG_MTRR=y
# CONFIG_MTRR_SANITIZER is not set
CONFIG_X86_PAT=y
CONFIG_ARCH_USES_PG_UNCACHED=y
# CONFIG_EFI is not set
# CONFIG_SECCOMP is not set
# CONFIG_CC_STACKPROTECTOR is not set
CONFIG_HZ_100=y
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=100
CONFIG_SCHED_HRTICK=y
CONFIG_KEXEC=y
# CONFIG_CRASH_DUMP is not set
CONFIG_PHYSICAL_START=0x1000000
# CONFIG_RELOCATABLE is not set
CONFIG_PHYSICAL_ALIGN=0x100000
# CONFIG_COMPAT_VDSO is not set
CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE=""
# CONFIG_CMDLINE_OVERRIDE is not set
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ