Commit 0e77060f authored by 蒋家盛's avatar 蒋家盛 Committed by Zeng Heng
Browse files

media: vidtv: mux: Add check and kfree for kstrdup

stable inclusion
from stable-v5.10.201
commit 64863ba8e6b7651d994c6e6d506cc8aa2ac45edb
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I9RE9O
CVE: CVE-2023-52841

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=64863ba8e6b7651d994c6e6d506cc8aa2ac45edb



--------------------------------

[ Upstream commit 1fd6eb12642e0c32692924ff359c07de4b781d78 ]

Add check for the return value of kstrdup() and return the error
if it fails in order to avoid NULL pointer dereference.
Moreover, use kfree() in the later error handling in order to avoid
memory leak.

Fixes: c2f78f0c ("media: vidtv: psi: add a Network Information Table (NIT)")
Signed-off-by: default avatarJiasheng Jiang <jiasheng@iscas.ac.cn>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarZeng Heng <zengheng4@huawei.com>
parent a2d508a1
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -504,13 +504,16 @@ struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe,
	m->priv = args->priv;
	m->network_id = args->network_id;
	m->network_name = kstrdup(args->network_name, GFP_KERNEL);
	if (!m->network_name)
		goto free_mux_buf;

	m->timing.current_jiffies = get_jiffies_64();

	if (args->channels)
		m->channels = args->channels;
	else
		if (vidtv_channels_init(m) < 0)
			goto free_mux_buf;
			goto free_mux_network_name;

	/* will alloc data for pmt_sections after initializing pat */
	if (vidtv_channel_si_init(m) < 0)
@@ -527,6 +530,8 @@ struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe,
	vidtv_channel_si_destroy(m);
free_channels:
	vidtv_channels_destroy(m);
free_mux_network_name:
	kfree(m->network_name);
free_mux_buf:
	vfree(m->mux_buf);
free_mux: