Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5a1a2f63 authored by Krzysztof Ha?asa's avatar Krzysztof Ha?asa Committed by Mauro Carvalho Chehab
Browse files

media: tw686x: Fix oops on buffer alloc failure



The error path currently calls tw686x_video_free() which requires
vc->dev to be initialized, causing a NULL dereference on uninitizalized
channels.

Fix this by setting the vc->dev fields for all the channels first.

Fixes: f8afaa8d ("[media] tw686x: Introduce an interface to support multiple DMA modes")

Signed-off-by: default avatarKrzysztof Ha?asa <khalasa@piap.pl>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent acbea679
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -1190,6 +1190,14 @@ int tw686x_video_init(struct tw686x_dev *dev)
			return err;
	}

	/* Initialize vc->dev and vc->ch for the error path */
	for (ch = 0; ch < max_channels(dev); ch++) {
		struct tw686x_video_channel *vc = &dev->video_channels[ch];

		vc->dev = dev;
		vc->ch = ch;
	}

	for (ch = 0; ch < max_channels(dev); ch++) {
		struct tw686x_video_channel *vc = &dev->video_channels[ch];
		struct video_device *vdev;
@@ -1198,9 +1206,6 @@ int tw686x_video_init(struct tw686x_dev *dev)
		spin_lock_init(&vc->qlock);
		INIT_LIST_HEAD(&vc->vidq_queued);

		vc->dev = dev;
		vc->ch = ch;

		/* default settings */
		err = tw686x_set_standard(vc, V4L2_STD_NTSC);
		if (err)