From: Sudip Mukherjee <sudipm.mukherjee-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Mathias Nyman <mathias.nyman-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
Cc: Mathias Nyman
<mathias.nyman-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
lukaszx.szulc-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org,
Andy Shevchenko
<andy.shevchenko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Andy Shevchenko
<andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
Christoph Hellwig <hch-jcswGhMUV9g@public.gmane.org>
Subject: Re: usb HC busted?
Date: Tue, 17 Jul 2018 12:41:04 +0100 [thread overview]
Message-ID: <20180717114104.irgdb5rmg2qxclgp@debian> (raw)
In-Reply-To: <20180630210704.vzkt2poh5qr3hpff@debian>
[-- Attachment #1: Type: text/plain, Size: 1634 bytes --]
Hi Mathias,
On Sat, Jun 30, 2018 at 10:07:04PM +0100, Sudip Mukherjee wrote:
> Hi Mathias,
>
> On Fri, Jun 29, 2018 at 02:41:13PM +0300, Mathias Nyman wrote:
> > On 27.06.2018 14:59, Sudip Mukherjee wrote:
> > > > > Can you share a bit more details on the platform you are using, and what types of test you are running.
> > > >
<snip>
> Then to track what is going on, I added the slub debugging and :(
> I have attached part of dmesg for you to check.
> Will appreciate your help in finding out the problem.
I did some more debugging. Tested with a KASAN enabled kernel and that
shows the problem. The report is attached.
To my understanding:
btusb_work() is calling usb_set_interface() with alternate = 0. which
again calls usb_hcd_alloc_bandwidth() and that frees the rings by
xhci_free_endpoint_ring(). But then usb_set_interface() continues and
calls usb_disable_interface() -> usb_hcd_flush_endpoint()->unlink1()->
xhci_urb_dequeue() which at the end gives the command to stop endpoint.
In all the cycles I have tested I see that only in the fail case
handle_cmd_completion() gets called, but in the cycles where the error
is not there handle_cmd_completion() is not called with that command.
I am not sure what is happening, and you are the best person to understand
what is happening. :)
But for now (untill you are back from holiday and suggest a proper solution),
I made a hacky patch (attached) which is working and I donot get any
corruption after that. Both KASAN and slub debug are also happy.
So, now waiting for you to analyze what is going on and suggest a proper
fix.
Thanks in advance.
--
Regards
Sudip
[-- Attachment #2: usb_kasan --]
[-- Type: text/plain, Size: 4992 bytes --]
[ 236.814156] ==================================================================
[ 236.814187] BUG: KASAN: use-after-free in xhci_trb_virt_to_dma+0x2e/0x74 [xhci_hcd]
[ 236.814193] Read of size 8 at addr ffff8800789329c8 by task weston/138
[ 236.814203] CPU: 0 PID: 138 Comm: weston Tainted: G U W O 4.14.47-20180606+ #7
[ 236.814206] Hardware name: xxx, BIOS 2017.01-00087-g43e04de 08/30/2017
[ 236.814209] Call Trace:
[ 236.814214] <IRQ>
[ 236.814226] dump_stack+0x46/0x59
[ 236.814238] print_address_description+0x6b/0x23b
[ 236.814255] ? xhci_trb_virt_to_dma+0x2e/0x74 [xhci_hcd]
[ 236.814262] kasan_report+0x220/0x246
[ 236.814278] xhci_trb_virt_to_dma+0x2e/0x74 [xhci_hcd]
[ 236.814294] trb_in_td+0x3b/0x1cd [xhci_hcd]
[ 236.814311] handle_cmd_completion+0x1181/0x2c9b [xhci_hcd]
[ 236.814329] ? xhci_queue_new_dequeue_state+0x5d9/0x5d9 [xhci_hcd]
[ 236.814337] ? drm_handle_vblank+0x4ec/0x590
[ 236.814352] xhci_irq+0x529/0x3294 [xhci_hcd]
[ 236.814362] ? __accumulate_pelt_segments+0x24/0x33
[ 236.814378] ? finish_td.isra.40+0x223/0x223 [xhci_hcd]
[ 236.814384] ? __accumulate_pelt_segments+0x24/0x33
[ 236.814390] ? __accumulate_pelt_segments+0x24/0x33
[ 236.814405] ? xhci_irq+0x3294/0x3294 [xhci_hcd]
[ 236.814412] __handle_irq_event_percpu+0x149/0x3db
[ 236.814421] handle_irq_event_percpu+0x65/0x109
[ 236.814428] ? __handle_irq_event_percpu+0x3db/0x3db
[ 236.814436] ? ttwu_do_wakeup.isra.18+0x3a2/0x3ce
[ 236.814442] handle_irq_event+0xa8/0x10a
[ 236.814449] handle_edge_irq+0x4b2/0x538
[ 236.814458] handle_irq+0x3e/0x45
[ 236.814465] do_IRQ+0x5c/0x126
[ 236.814474] common_interrupt+0x7a/0x7a
[ 236.814478] </IRQ>
[ 236.814483] RIP: 0023:0xf79d3d82
[ 236.814486] RSP: 002b:00000000ffc588e8 EFLAGS: 00200282 ORIG_RAX: ffffffffffffffdc
[ 236.814493] RAX: 0000000000000000 RBX: 00000000f7bebd5c RCX: 0000000000000000
[ 236.814496] RDX: 0000000008d4197c RSI: 0000000000000000 RDI: 00000000f746c020
[ 236.814499] RBP: 00000000ffc588e8 R08: 0000000000000000 R09: 0000000000000000
[ 236.814503] R10: 0000000000000000 R11: 0000000000200206 R12: 0000000000000000
[ 236.814506] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
[ 236.814513] Allocated by task 2082:
[ 236.814521] kasan_kmalloc.part.1+0x51/0xc7
[ 236.814526] kmem_cache_alloc_trace+0x178/0x187
[ 236.814540] xhci_segment_alloc.isra.11+0x9d/0x3bf [xhci_hcd]
[ 236.814553] xhci_alloc_segments_for_ring+0x9e/0x176 [xhci_hcd]
[ 236.814566] xhci_ring_alloc.constprop.16+0x197/0x4ba [xhci_hcd]
[ 236.814579] xhci_endpoint_init+0x77a/0x9ba [xhci_hcd]
[ 236.814592] xhci_add_endpoint+0x3bc/0x43b [xhci_hcd]
[ 236.814615] usb_hcd_alloc_bandwidth+0x7ef/0x857 [usbcore]
[ 236.814637] usb_set_interface+0x294/0x681 [usbcore]
[ 236.814645] btusb_work+0x2e6/0x981 [btusb]
[ 236.814651] process_one_work+0x579/0x9e9
[ 236.814656] worker_thread+0x68f/0x804
[ 236.814662] kthread+0x31c/0x32b
[ 236.814668] ret_from_fork+0x35/0x40
[ 236.814672] Freed by task 1533:
[ 236.814678] kasan_slab_free+0xb3/0x15e
[ 236.814683] kfree+0x103/0x1a9
[ 236.814696] xhci_ring_free+0x205/0x286 [xhci_hcd]
[ 236.814709] xhci_free_endpoint_ring+0x4d/0x83 [xhci_hcd]
[ 236.814722] xhci_check_bandwidth+0x57b/0x65a [xhci_hcd]
[ 236.814743] usb_hcd_alloc_bandwidth+0x665/0x857 [usbcore]
[ 236.814765] usb_set_interface+0x294/0x681 [usbcore]
[ 236.814772] btusb_work+0x664/0x981 [btusb]
[ 236.814777] process_one_work+0x579/0x9e9
[ 236.814782] worker_thread+0x68f/0x804
[ 236.814788] kthread+0x31c/0x32b
[ 236.814793] ret_from_fork+0x35/0x40
[ 236.814799] The buggy address belongs to the object at ffff8800789329c8
which belongs to the cache kmalloc-64 of size 64
[ 236.814804] The buggy address is located 0 bytes inside of
64-byte region [ffff8800789329c8, ffff880078932a08)
[ 236.814806] The buggy address belongs to the page:
[ 236.814812] page:ffffea0001e24c80 count:1 mapcount:0 mapping: (null) index:0x0 compound_mapcount: 0
[ 236.825813] flags: 0x4000000000008100(slab|head)
[ 236.830981] raw: 4000000000008100 0000000000000000 0000000000000000 0000000100130013
[ 236.830988] raw: ffffea0000cfbaa0 ffffea00010ddf20 ffff88013b80f640 0000000000000000
[ 236.830990] page dumped because: kasan: bad access detected
[ 236.830993] Memory state around the buggy address:
[ 236.830999] ffff880078932880: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[ 236.831004] ffff880078932900: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[ 236.831008] >ffff880078932980: fc fc fc fc fc fc fc fc fc fb fb fb fb fb fb fb
[ 236.831011] ^
[ 236.831015] ffff880078932a00: fb fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[ 236.831019] ffff880078932a80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[ 236.831021] ==================================================================
[ 236.831024] Disabling lock debugging due to kernel taint
[-- Attachment #3: 0001-test.patch --]
[-- Type: text/x-diff, Size: 941 bytes --]
>From cbbe6dc59ac90a4f2c358de56e58e254320171e0 Mon Sep 17 00:00:00 2001
From: Sudip Mukherjee <sudipm.mukherjee-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date: Tue, 10 Jul 2018 09:50:00 +0100
Subject: [PATCH] hacky solution to mem-corruption
Signed-off-by: Sudip Mukherjee <sudipm.mukherjee-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
drivers/usb/core/message.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
index 7cd4ec33dbf4..7fdf7a27611d 100644
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -1398,7 +1398,8 @@ int usb_set_interface(struct usb_device *dev, int interface, int alternate)
remove_intf_ep_devs(iface);
usb_remove_sysfs_intf_files(iface);
}
- usb_disable_interface(dev, iface, true);
+ if (!(iface->cur_altsetting && alt))
+ usb_disable_interface(dev, iface, true);
iface->cur_altsetting = alt;
--
2.11.0
[-- Attachment #4: Type: text/plain, Size: 0 bytes --]
next prev parent reply other threads:[~2018-07-17 11:41 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20180518100650.kfw6wijpncpvqx7j@debian>
[not found] ` <6790b352-add3-5531-115c-15db6c9c744d@intel.com>
[not found] ` <20180518130458.v73syr3fltdzdzzi@debian>
[not found] ` <881d576b-c7c1-ef74-c6bc-68b81371e7e0@intel.com>
[not found] ` <20180523212956.n4ztasdffg2aeaku@debian>
[not found] ` <80eace7a-976d-65a5-a353-54a2b18edd06@linux.intel.com>
[not found] ` <20180604152848.db3msouyi4ektvv6@debian>
2018-06-06 14:12 ` usb HC busted? Mathias Nyman
[not found] ` <06226ecb-baad-cc36-e9e3-797dabb0aa5e-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-06-06 15:36 ` Andy Shevchenko
[not found] ` <42ec4ab07d96b4302b875ac9c5eb76675bf85690.camel-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-06-06 16:45 ` Sudip Mukherjee
2018-06-07 7:40 ` Mathias Nyman
[not found] ` <2e8829c2-850d-6bca-5f0c-58a809dc9499-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-06-08 9:07 ` Sudip Mukherjee
2018-06-21 0:53 ` Sudip Mukherjee
2018-06-21 11:01 ` Mathias Nyman
[not found] ` <2b4fe87a-3706-0aa8-2b61-a9c1d1352a7a-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-06-25 16:15 ` Sudip Mukherjee
2018-06-27 11:59 ` Sudip Mukherjee
2018-06-27 12:20 ` Sudip Mukherjee
2018-06-29 11:41 ` Mathias Nyman
[not found] ` <4b269009-7593-a41f-9f0f-203ee174b52e-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-06-30 21:07 ` Sudip Mukherjee
2018-07-17 11:41 ` Sudip Mukherjee [this message]
2018-07-17 12:04 ` Greg KH
[not found] ` <20180717120411.GB28592-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2018-07-17 13:20 ` Sudip Mukherjee
2018-07-17 13:53 ` Greg KH
2018-07-17 14:31 ` Alan Stern
[not found] ` <Pine.LNX.4.44L0.1807171029310.1689-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
2018-07-17 15:52 ` Greg KH
[not found] ` <20180717155259.GB2416-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2018-07-17 15:59 ` Sudip Mukherjee
2018-07-17 17:01 ` Sudip Mukherjee
2018-07-17 14:28 ` Alan Stern
[not found] ` <Pine.LNX.4.44L0.1807171022001.1689-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
2018-07-17 14:40 ` Sudip Mukherjee
2018-07-17 14:49 ` Sudip Mukherjee
2018-07-17 15:08 ` Alan Stern
2018-07-17 15:10 ` Sudip Mukherjee
2018-07-19 10:59 ` Mathias Nyman
[not found] ` <f7801c24-fa98-6338-0b26-33a0ac9498bb-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-07-19 11:34 ` Sudip Mukherjee
2018-07-19 15:42 ` Mathias Nyman
[not found] ` <ab814c88-0857-5444-57da-34c21b8d7f6c-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-07-19 17:32 ` Sudip Mukherjee
2018-07-20 11:10 ` Mathias Nyman
[not found] ` <d3f5575c-c75b-ea16-6da9-b2fe3cc9c102-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-07-20 12:54 ` Sudip Mukherjee
2018-07-21 10:55 ` Sudip Mukherjee
2018-07-19 14:57 ` Alan Stern
[not found] ` <Pine.LNX.4.44L0.1807191046180.1308-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
2018-07-20 11:46 ` Mathias Nyman
[not found] ` <f8cfa055-cfd8-db66-a386-72bf904e17cd-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-07-20 14:09 ` Alan Stern
2018-06-06 16:42 ` Sudip Mukherjee
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180717114104.irgdb5rmg2qxclgp@debian \
--to=sudipm.mukherjee-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
--cc=andy.shevchenko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=hch-jcswGhMUV9g@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=lukaszx.szulc-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=mathias.nyman-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
--cc=mathias.nyman-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox