linux/drivers/firewire
Aleksandr Nogikh 42d217add8 firewire: ohci: fix NULL pointer dereference in ar_context_release
During the error handling path of the driver's probe function, a NULL
pointer dereference can occur in ar_context_release().

When pci_probe() fails early (e.g., if pcim_enable_device() or MMIO mapping
fails), the devres cleanup mechanism invokes release_ohci(). This function
unconditionally calls ar_context_release() to clean up the asynchronous
receive contexts. However, if ar_context_init() was not yet called,
ctx->ohci remains NULL (as the fw_ohci structure is zero-initialized by
devres_alloc()).

ar_context_release() immediately dereferences ctx->ohci to get the dev
pointer before checking if the context was actually initialized, leading to
a crash:

Oops: general protection fault, probably for non-canonical address
0xdffffc0000000001: 0000 [#1] SMP KASAN NOPTI
KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f]
RIP: 0010:ar_context_release+0x3f/0x380 drivers/firewire/ohci.c:543
Call Trace:
 release_ohci+0x3f/0x60 drivers/firewire/ohci.c:3567
 release_nodes drivers/base/devres.c:546 [inline]
 devres_release_all+0x1a8/0x260 drivers/base/devres.c:576
 device_unbind_cleanup drivers/base/dd.c:597 [inline]
 really_probe+0x451/0xae0 drivers/base/dd.c:772

To fix this, move the assignment of the dev pointer after the !ctx->buffer
check. If ctx->buffer is NULL, it indicates that the context was never
successfully initialized and there is nothing to release, safely avoiding
the dereference of the uninitialized ctx->ohci pointer.

Fixes: 5716e58aec ("firewire: ohci: release buffer for AR req/resp contexts when managed resource is released")
Assisted-by: Gemini:gemini-3.5-flash Gemini:gemini-3.1-pro-preview syzbot
Reported-by: syzbot+d30aad27833a559defab@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=d30aad27833a559defab
Link: https://syzkaller.appspot.com/ai_job?id=10a18617-7893-42dd-bf1c-cd49e19e95d9
Signed-off-by: Aleksandr Nogikh <nogikh@google.com>
Link: https://lore.kernel.org/r/90c5db71-dd1f-4d46-b9d3-2f1046cbd5ea@mail.kernel.org
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
2026-08-13 21:02:23 +09:00
..
.kunitconfig firewire: ohci: add static inline functions to deserialize for Self-ID DMA operation 2024-07-04 08:12:48 +09:00
core-card.c firewire: core: provide isoc header buffer size outside card driver 2026-01-18 17:18:48 +09:00
core-cdev.c firewire: core: cancel using delayed work for iso_resource_once management 2026-05-21 18:43:25 +09:00
core-device.c Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00
core-iso.c Convert remaining multi-line kmalloc_obj/flex GFP_KERNEL uses 2026-02-22 08:26:33 -08:00
core-topology.c firewire: core: Open-code topology list walk 2026-06-13 11:10:23 +09:00
core-trace.c firewire: core: move copy_port_status() helper function to TP_fast_assign() block 2024-07-12 14:34:12 +09:00
core-transaction.c firewire: core: fix race condition against transaction list 2026-01-29 08:03:55 +09:00
core.h firewire: core: provide isoc header buffer size outside card driver 2026-01-18 17:18:48 +09:00
device-attribute-test.c firewire: test: Fix potential null dereference in firewire kunit test 2025-01-13 10:31:27 +09:00
init_ohci1394_dma.c firewire: init_ohci1394_dma: add missing function parameter documentation 2025-10-25 08:29:56 +09:00
Kconfig PCI: Add CONFIG_MMU dependency 2025-04-23 15:40:30 -05:00
Makefile firewire: ohci: add static inline functions to deserialize for Self-ID DMA operation 2024-07-04 08:12:48 +09:00
net.c firewire: net: Fix fragmented datagram reassembly 2026-07-13 20:19:06 +09:00
nosy-user.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
nosy.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nosy.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ohci-serdes-test.c firewire: ohci: add static inline functions to serialize/deserialize data of IT DMA 2024-08-02 09:36:05 +09:00
ohci.c firewire: ohci: fix NULL pointer dereference in ar_context_release 2026-08-13 21:02:23 +09:00
ohci.h firewire: ohci: add static inline functions to serialize/deserialize data of IT DMA 2024-08-02 09:36:05 +09:00
packet-header-definitions.h firewire: core: arrangement header inclusion for tracepoints events 2024-06-17 08:37:03 +09:00
packet-serdes-test.c firewire: core: add tests for serialization/deserialization of phy config packet 2024-06-17 08:37:03 +09:00
phy-packet-definitions.h firewire: core: add tests for serialization/deserialization of phy config packet 2024-06-17 08:37:03 +09:00
sbp2.c Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00
self-id-sequence-helper-test.c firewire: core: add helper function to handle port status from self ID sequence and its KUnit test 2024-06-17 08:37:02 +09:00
uapi-test.c firewire: add missing MODULE_DESCRIPTION() to test modules 2024-05-27 07:34:58 +09:00