[PATCH] usb: mtu3: fix double dereference in mtu3_log_ep trace event
From: oushixiong1025
Date: Fri Aug 28 2026 - 06:32:00 EST
From: Shixiong Ou <oushixiong@xxxxxxxxxx>
TP_printk() dereferences the gpd_ring pointer stored in the entry
via &__entry->gpd_ring->dma, which may point to freed memory when
the trace record is read later. Store the dma address in the entry
and print that instead.
This is detected at boot:
TRACE EVENT ERROR: Event mtu3_gadget_ep_set_halt has double dereference in TP_printk: &REC->gpd_ring->dma
------------[ cut here ]------------
Event mtu3_gadget_ep_set_halt has double dereference in TP_printk: &REC->gpd_ring->dma
WARNING: kernel/trace/trace_events.c:420 at test_double_dereference+0x138/0x140, CPU#0: swapper/0/0
Call trace:
test_double_dereference+0x138/0x140 (P)
trace_event_raw_init+0x350/0x5b8
event_init+0x38/0xb0
trace_event_init+0xf4/0x5c8
trace_init+0x30/0x6b8
start_kernel+0x4a4/0x8d8
__primary_switched+0x88/0x98
TRACE EVENT ERROR: Event mtu3_gadget_ep_disable has double dereference in TP_printk: &REC->gpd_ring->dma
TRACE EVENT ERROR: Event mtu3_gadget_ep_enable has double dereference in TP_printk: &REC->gpd_ring->dma
Fixes: 83374e035b62 ("usb: mtu3: add tracepoints to help debug")
Signed-off-by: Shixiong Ou <oushixiong@xxxxxxxxxx>
---
drivers/usb/mtu3/mtu3_trace.h | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/mtu3/mtu3_trace.h b/drivers/usb/mtu3/mtu3_trace.h
index 89870175d635..041e730c88a6 100644
--- a/drivers/usb/mtu3/mtu3_trace.h
+++ b/drivers/usb/mtu3/mtu3_trace.h
@@ -224,6 +224,7 @@ DECLARE_EVENT_CLASS(mtu3_log_ep,
__field(unsigned int, flags)
__field(unsigned int, direction)
__field(struct mtu3_gpd_ring *, gpd_ring)
+ __field(dma_addr_t, gpd_dma)
),
TP_fast_assign(
__assign_str(name);
@@ -235,12 +236,13 @@ DECLARE_EVENT_CLASS(mtu3_log_ep,
__entry->flags = mep->flags;
__entry->direction = mep->is_in;
__entry->gpd_ring = &mep->gpd_ring;
+ __entry->gpd_dma = mep->gpd_ring.dma;
),
TP_printk("%s: type %s maxp %d slot %d mult %d burst %d ring %p/%pad flags %c:%c%c%c:%c",
__get_str(name), usb_ep_type_string(__entry->type),
__entry->maxp, __entry->slot,
__entry->mult, __entry->maxburst,
- __entry->gpd_ring, &__entry->gpd_ring->dma,
+ __entry->gpd_ring, &__entry->gpd_dma,
__entry->flags & MTU3_EP_ENABLED ? 'E' : 'e',
__entry->flags & MTU3_EP_STALL ? 'S' : 's',
__entry->flags & MTU3_EP_WEDGE ? 'W' : 'w',
--
2.25.1
No virus found
Checked by Hillstone Network AntiVirus