Panic in quirk_usb_early_handoff

Robin Murphy robin.murphy at arm.com
Fri Mar 3 11:02:02 PST 2017


On 03/03/17 17:15, Mason wrote:
[...]
>>> [    1.264893] Unable to handle kernel paging request at virtual address d08664f4

Note that that's a reasonable approximation of a vmalloc address...

>>> [    1.272248] pgd = c0004000
>>> [    1.275060] [d08664f4] *pgd=8f804811, *pte=00000000, *ppte=00000000
>>> [    1.281476] Internal error: Oops: 7 [#1] PREEMPT SMP ARM
>>> [    1.286897] Modules linked in:
>>> [    1.290053] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.9.7-1-rc2 #151
>>> [    1.296696] Hardware name: Sigma Tango DT
>>> [    1.300808] task: cf82c9c0 task.stack: cf838000
>>> [    1.305446] PC is at quirk_usb_early_handoff+0x3e8/0x790
>>> [    1.310873] LR is at ioremap_page_range+0xf8/0x1a8
>>> [    1.315771] pc : [<c039fe8c>]    lr : [<c02d0a10>]    psr: 000e0013
>>> [    1.315771] sp : cf839d78  ip : 00000000  fp : cf839e38
>>> [    1.327482] r10: c10248a0  r9 : 00000000  r8 : d08664f4
>>> [    1.332816] r7 : d084e000  r6 : 00002000  r5 : 000c0300  r4 : cfb5f800
>>> [    1.339460] r3 : 000184f4  r2 : 00000000  r1 : 91001e13  r0 : d084e000

...and that specifically it's r0 + r3...

[...]
>> [    1.258926] Unable to handle kernel paging request at virtual address d0863f70
>> [    1.266284] pgd = c0004000
>> [    1.269097] [d0863f70] *pgd=8f804811, *pte=00000000, *ppte=00000000
>> [    1.275512] Internal error: Oops: 7 [#1] PREEMPT SMP ARM
>> [    1.280933] Modules linked in:
>> [    1.284089] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.9.7-1-rc2 #157
>> [    1.290732] Hardware name: Sigma Tango DT
>> [    1.294843] task: cf82c9c0 task.stack: cf838000
>> [    1.299482] PC is at quirk_usb_early_handoff+0x3e8/0x790
>> [    1.304907] LR is at ioremap_page_range+0xf8/0x1a8
>> [    1.309806] pc : [<c039fe44>]    lr : [<c02d0a10>]    psr: 000e0013
>> [    1.309806] sp : cf839d78  ip : 00000000  fp : cf839e38
>> [    1.321517] r10: c10248a0  r9 : 00000000  r8 : d0863f70
>> [    1.326851] r7 : d084e000  r6 : 00002000  r5 : 000c0300  r4 : cfb52800
>> [    1.333495] r3 : 00015f70  r2 : 00000000  r1 : 91001e13  r0 : d084e000

...and again...

[...]
> [    1.261813] Unable to handle kernel paging request at virtual address d08611e4
> [    1.269167] pgd = c0004000
> [    1.271979] [d08611e4] *pgd=8f804811, *pte=00000000, *ppte=00000000
> [    1.278394] Internal error: Oops: 7 [#1] PREEMPT SMP ARM
> [    1.283815] Modules linked in:
> [    1.286970] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.9.7-1-rc2 #157
> [    1.293614] Hardware name: Sigma Tango DT
> [    1.297726] task: cf82c9c0 task.stack: cf838000
> [    1.302364] PC is at quirk_usb_early_handoff+0x3e8/0x790
> [    1.307790] LR is at ioremap_page_range+0xf8/0x1a8
> [    1.312688] pc : [<c039fe44>]    lr : [<c02d0a10>]    psr: 000e0013
> [    1.312688] sp : cf839d78  ip : 00000000  fp : cf839e38
> [    1.324399] r10: c10248a0  r9 : 00000000  r8 : d08611e4
> [    1.329733] r7 : d084e000  r6 : 00002000  r5 : 000c0300  r4 : cfb4e800
> [    1.336377] r3 : 000131e4  r2 : 00000000  r1 : 91001e13  r0 : d084e000

...and again. And always at the same PC, too. Looking at
quirk_usb_early_handoff(), it mostly seems to go off poking bridge
resources, so I'd hazard a guess that it's down to your host driver,
with something uninitialised (or already freed) being used as an offset
into some ioremapped resource (which given the consistency of r0 is
probably allocated pretty early on).

"addr2line -i -e vmlinux c039fe44", and work backwards from there ;) In
particular I'd follow the provenance of r3.

Robin.



More information about the linux-arm-kernel mailing list