linux/include/media
Mirela Rabulea 06cb687a51 media: v4l2-fwnode: Fix subdev owner overwritten in v4l2_async_register_subdev_sensor()
The v4l2 helper v4l2_async_register_subdev_sensor() calls
v4l2_async_register_subdev(), which is a macro that expands to
__v4l2_async_register_subdev(sd,THIS_MODULE). Since the macro is expanded
inside v4l2-fwnode.c, THIS_MODULE resolves to the v4l2-fwnode module
rather than the sensor driver module that originally set sd->owner. When
v4l2-fwnode is built-in, THIS_MODULE evaluates to NULL, which then
overwrites the sensor driver's owner with NULL.

This causes the problem that the sensor module's reference count is never
incremented during async registration, so the module can be removed while
the subdevice is still in use by a notifier (e.g., a CSI-2 receiver
bridge driver).

Fix this by renaming v4l2_async_register_subdev_sensor() to
__v4l2_async_register_subdev_sensor() with an added explicit module
argument and introducing a wrapper macro:
    #define v4l2_async_register_subdev_sensor(sd) \
        __v4l2_async_register_subdev_sensor(sd, THIS_MODULE)

This ensures the sensor driver module is properly referenced even when
the sensor driver does not init the owner field before calling
v4l2_async_register_subdev_sensor() and prevents premature module removal.

Fixes: aef69d5475 ("media: v4l: fwnode: Add a convenience function for registering sensors")
Cc: stable@vger.kernel.org
Suggested-by: Frank Li <Frank.Li@nxp.com>
Link: https://lore.kernel.org/linux-media/20240315073125.275501-2-sakari.ailus@linux.intel.com/
Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
2026-06-05 10:28:03 +03:00
..
cadence media: cadence: cdns-csi2rx: Support multiple pixels per clock cycle 2025-08-25 15:40:42 +02:00
davinci media: v4l: async: Rename v4l2_async_subdev as v4l2_async_connection 2023-07-28 10:44:25 +02:00
drv-intf media: saa7146: Replace saa7146_ext_vv.vbi_fops with write function 2025-11-03 15:58:42 +01:00
i2c media: i2c: lm3560: Add proper support for LM3559 2026-05-15 15:00:44 +03:00
tpg media: v4l2-tpg: add HDMI Video Guard Band test pattern 2022-06-20 10:30:30 +01:00
cec-notifier.h Update rmk's email address in various drivers 2020-04-21 17:50:09 +01:00
cec-pin.h media: cec-gpio: handle gpiod_get_value errors correctly 2020-04-29 12:04:38 +02:00
cec.h media: cec: include linux/debugfs.h and linux/seq_file.h where needed 2025-01-07 12:21:38 +01:00
demux.h media: dvb: update buffer mmaped flags and frame counter 2018-02-23 11:44:08 -05:00
dmxdev.h media: dmxdev: drop unneeded <linux/kernel.h> inclusion from other headers 2021-12-14 16:19:04 +01:00
dvb_ca_en50221.h media: move dvb kAPI headers to include/media 2017-12-28 13:16:01 -05:00
dvb_demux.h media: dvb: update buffer mmaped flags and frame counter 2018-02-23 11:44:08 -05:00
dvb_frontend.h Revert "media: dvb-core: Fix use-after-free on race condition at dvb_frontend" 2023-06-14 23:16:29 +01:00
dvb_net.h media: dvb-core: Fix use-after-free due on race condition at dvb_net 2023-05-14 06:30:45 +01:00
dvb_ringbuffer.h media: dvb_ringbuffer: Fix typo in dvb_ringbuffer_pkt_write() kerneldoc 2022-11-25 09:45:47 +00:00
dvb_vb2.h media: dvb-core: dvb_vb2: drop wait_prepare/finish callbacks 2025-12-18 11:14:57 +01:00
dvb-usb-ids.h media: dvb-usb: dib0700_devices: use an enum for the device number 2022-04-18 07:36:44 +02:00
dvbdev.h media: dvbdev.h: do some kernel-doc cleanups 2023-05-14 16:05:27 +01:00
frame_vector.h media: videobuf2: revert "get_userptr: buffers are always writable" 2022-12-06 07:14:31 +00:00
imx.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
ipu-bridge.h media: ipu-bridge: add mod_devicetable.h header inclusion 2024-06-04 08:31:22 +02:00
ipu6-pci-table.h media: ipu6: Add PCI device table header 2024-04-29 14:56:37 +02:00
jpeg.h media: Add common header file with JPEG marker definitions 2023-05-25 16:21:21 +02:00
media-dev-allocator.h media: Fix Media Controller API config checks 2021-06-24 14:26:00 +02:00
media-device.h media: mc: add debugfs node to keep track of requests 2026-01-05 15:56:31 +01:00
media-devnode.h media: mc: add debugfs node to keep track of requests 2026-01-05 15:56:31 +01:00
media-entity.h media: mc-entity: Drop ifdef for media_entity_cleanup definition 2026-05-21 07:41:32 +02:00
media-request.h media: mc: add debugfs node to keep track of requests 2026-01-05 15:56:31 +01:00
mipi-csi2.h media: Add MIPI CSI-2 generic long packet type definition 2023-10-07 10:55:48 +02:00
rc-core.h media: lirc: increase IR_MAX_DURATION to send extended code sequences 2026-03-17 14:43:57 +01:00
rc-map.h media: rc: add keymap for Siemens Gigaset RC20 remote 2025-02-13 12:12:31 +01:00
rcar-fcp.h media: rcar-fcp: Add rcar_fcp_soft_reset() 2025-06-18 09:20:45 +02:00
tuner-types.h media: tuners: Constify struct tunertype, tuner_range and tuner_params 2025-02-21 10:33:15 +01:00
tuner.h media: tuner-simple: Add support for Tena TNF931D-DFDR1 2024-06-29 12:20:05 +02:00
tveeprom.h media: drop unnecessary networking includes 2023-03-19 22:50:06 +01:00
v4l2-async.h media: v4l2-fwnode: Fix subdev owner overwritten in v4l2_async_register_subdev_sensor() 2026-06-05 10:28:03 +03:00
v4l2-cci.h media: v4l2-cci: Add support for little-endian encoded registers 2023-12-13 13:21:19 +01:00
v4l2-common.h media: v4l2-common: add v4l2_fill_pixfmt_mp_aligned helper 2026-05-21 12:32:19 +02:00
v4l2-ctrls.h media: v4l2-ctrls: Set error v4l2_ctrl_new_fwnode_properties consistently 2026-01-14 23:33:02 +01:00
v4l2-dev.h media: v4l2-dev: Make macros to obtain containers const-aware 2025-11-03 15:58:41 +01:00
v4l2-device.h media: include: update Hans Verkuil's email address 2025-09-09 15:58:56 +02:00
v4l2-dv-timings.h media: v4l2-core: v4l2-dv-timings: support DRM IFs 2025-09-07 10:29:19 +02:00
v4l2-event.h media: v4l2-event: Annotate struct v4l2_subscribed_event with __counted_by 2023-10-07 10:55:45 +02:00
v4l2-fh.h media: Drop V4L2_FL_USES_V4L2_FH checks 2025-08-13 08:33:46 +02:00
v4l2-flash-led-class.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
v4l2-fwnode.h media: v4l2-fwnode: Return -EPROBE_DEFER on parsing NULL endpoints 2026-03-24 11:58:02 +01:00
v4l2-h264.h media: h264: Sort p/b reflist using frame_num 2022-05-17 10:02:29 +02:00
v4l2-image-sizes.h media: v4l2-image-sizes: add HD and Full-HD definitions 2020-04-21 17:21:51 +02:00
v4l2-ioctl.h docs: media: v4l2-ioctl.h: document two global variables 2025-12-22 14:43:25 -07:00
v4l2-isp.h media: v4l2-isp: Rename block_info to block_type_info 2025-11-14 15:48:49 +01:00
v4l2-jpeg.h media: v4l2-jpeg: Remove unused v4l2_jpeg_parse_* wrappers 2025-06-17 10:35:17 +02:00
v4l2-mc.h media: v4l2-mc: Mark v4l2_pipeline_link_notify() as deprecated 2024-08-23 17:49:09 +03:00
v4l2-mediabus.h media: v4l: Support obtaining link frequency via get_mbus_config 2025-02-15 15:22:53 +01:00
v4l2-mem2mem.h media: v4l2-mem2mem: Add a kref to the v4l2_m2m_dev structure 2026-01-05 15:56:31 +01:00
v4l2-rect.h media: v4l2-rect.h: add enclosed rectangle helper 2020-07-04 12:29:38 +02:00
v4l2-subdev.h media: subdev: Split v4l2_subdev_get_frame_desc_passthrough() into locked and unlocked 2026-03-24 11:58:02 +01:00
v4l2-vp9.h media: Add VP9 v4l2 library 2021-11-22 07:47:13 +00:00
videobuf2-core.h media: vb2: use ssize_t for vb2_read/vb2_write 2026-05-06 09:05:56 +02:00
videobuf2-dma-contig.h media: videobuf2-dma-contig: fix bad kfree in vb2_dma_contig_clear_max_seg_size 2020-06-11 19:20:55 +02:00
videobuf2-dma-sg.h media: Change Andrzej Pietrasiewicz's e-mail address 2019-01-16 11:21:07 -05:00
videobuf2-dvb.h media: vb2: videobuf -> videobuf2 2022-08-29 15:38:09 +02:00
videobuf2-memops.h media: videobuf2: revert "get_userptr: buffers are always writable" 2022-12-06 07:14:31 +00:00
videobuf2-v4l2.h media: vb2: remove vb2_ops_wait_prepare/finish helpers 2025-12-18 11:14:57 +01:00
videobuf2-vmalloc.h [media] media: videobuf2: Replace videobuf2-core with videobuf2-v4l2 2015-10-01 08:48:18 -03:00
vsp1.h media: renesas: vsp1: Drop deprecated vsp1_du_setup_lif() function 2026-05-21 09:10:15 +02:00