summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCong Nguyen <congnt264@gmail.com>2026-08-08 16:07:29 +0700
committerHans Verkuil <hverkuil+cisco@kernel.org>2026-09-09 09:21:30 +0200
commitc7528789244ce7329ca883170fb9315d739ae985 (patch)
tree13bfc5ea337cb7ebc27eaf91648cc9728f4843e4
parent4957d480a0c87cf3d024e6ff1f57d1222f9212cb (diff)
downloadlinux-next-c7528789244ce7329ca883170fb9315d739ae985.tar.gz
linux-next-c7528789244ce7329ca883170fb9315d739ae985.zip
media: microchip-csi2dc: fix async notifier leak on probe error path
csi2dc_of_parse() ends up calling csi2dc_prepare_notifier(), which registers the V4L2 async notifier with v4l2_async_nf_register(). The probe error label csi2dc_probe_cleanup_notifier is reached after csi2dc_of_parse() has already succeeded (e.g. when media entity init, csi2dc_power() or v4l2_async_register_subdev() fail), but it calls only v4l2_async_nf_cleanup() and never v4l2_async_nf_unregister(). The notifier therefore stays chained in the global notifier_list while the enclosing struct csi2dc_device is freed, leading to list corruption and a use-after-free when the list is next walked. Unregister the notifier before cleaning it up on the error path, matching the teardown already done in csi2dc_remove(). Fixes: 2de0b3c0f678 ("media: atmel: introduce microchip csi2dc driver") Cc: stable@vger.kernel.org Assisted-by: Claude:claude-opus-4 Signed-off-by: Cong Nguyen <congnt264@gmail.com> Reviewed-by: Eugen Hristev <ehristev@kernel.org> Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
-rw-r--r--drivers/media/platform/microchip/microchip-csi2dc.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/media/platform/microchip/microchip-csi2dc.c b/drivers/media/platform/microchip/microchip-csi2dc.c
index e69292f3b2a9..b2c17ff2322f 100644
--- a/drivers/media/platform/microchip/microchip-csi2dc.c
+++ b/drivers/media/platform/microchip/microchip-csi2dc.c
@@ -735,6 +735,7 @@ static int csi2dc_probe(struct platform_device *pdev)
return 0;
csi2dc_probe_cleanup_notifier:
+ v4l2_async_nf_unregister(&csi2dc->notifier);
v4l2_async_nf_cleanup(&csi2dc->notifier);
csi2dc_probe_cleanup_entity:
media_entity_cleanup(&csi2dc->csi2dc_sd.entity);