Commit 55f1ecb1 authored by Sakari Ailus's avatar Sakari Ailus Committed by Mauro Carvalho Chehab
Browse files

media: v4l: subdev: Make link validation safer



Link validation currently accesses invalid pointers if the link passed to
it is not between two sub-devices. This is of course a driver bug.

Ignore the error but print a warning message, as this is how it used to
work previously.

Fixes: a6b995ed ("media: subdev: use streams in v4l2_subdev_link_validate()")
Reported-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Tested-by: default avatarHans de Goede <hdegoede@redhat.com>
Reviewed-by: default avatarTomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent 53077915
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -1258,6 +1258,16 @@ int v4l2_subdev_link_validate(struct media_link *link)
	bool states_locked;
	int ret;

	if (!is_media_entity_v4l2_subdev(link->sink->entity) ||
	    !is_media_entity_v4l2_subdev(link->source->entity)) {
		pr_warn_once("%s of link '%s':%u->'%s':%u is not a V4L2 sub-device, driver bug!\n",
			     !is_media_entity_v4l2_subdev(link->sink->entity) ?
			     "sink" : "source",
			     link->source->entity->name, link->source->index,
			     link->sink->entity->name, link->sink->index);
		return 0;
	}

	sink_sd = media_entity_to_v4l2_subdev(link->sink->entity);
	source_sd = media_entity_to_v4l2_subdev(link->source->entity);