Commit d7874ce2 authored by Fuqian Huang's avatar Fuqian Huang Committed by liwei
Browse files

media: media/dvb: Use kmemdup rather than duplicating its implementation

mainline inclusion
from mainline-v5.4-rc1
commit f6af820e
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I635IG
CVE: CVE-2022-45884

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f6af820ef1be58c2e4b81aa479b9f109eb6344ce



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

kmemdup is introduced to duplicate a region of memory in a neat way.
Rather than kmalloc/kzalloc + memcpy, which the programmer needs to
write the size twice (sometimes lead to mistakes), kmemdup improves
readability, leads to smaller code and also reduce the chances of mistakes.
Suggestion to use kmemdup rather than using kmalloc/kzalloc + memcpy.

Signed-off-by: default avatarFuqian Huang <huangfq.daxian@gmail.com>
Signed-off-by: default avatarSean Young <sean@mess.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Signed-off-by: default avatarliwei <liwei728@huawei.com>
parent caee0373
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -478,7 +478,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
		return -ENOMEM;
	}

	dvbdevfops = kzalloc(sizeof(struct file_operations), GFP_KERNEL);
	dvbdevfops = kmemdup(template->fops, sizeof(*dvbdevfops), GFP_KERNEL);

	if (!dvbdevfops){
		kfree (dvbdev);
@@ -494,7 +494,6 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
	dvbdev->fops = dvbdevfops;
	init_waitqueue_head (&dvbdev->wait_queue);

	memcpy(dvbdevfops, template->fops, sizeof(struct file_operations));
	dvbdevfops->owner = adap->module;

	list_add_tail (&dvbdev->list_head, &adap->device_list);
+2 −3
Original line number Diff line number Diff line
@@ -12287,7 +12287,8 @@ struct dvb_frontend *drx39xxj_attach(struct i2c_adapter *i2c)
	if (state == NULL)
		goto error;

	demod = kmalloc(sizeof(struct drx_demod_instance), GFP_KERNEL);
	demod = kmemdup(&drxj_default_demod_g,
			sizeof(struct drx_demod_instance), GFP_KERNEL);
	if (demod == NULL)
		goto error;

@@ -12311,8 +12312,6 @@ struct dvb_frontend *drx39xxj_attach(struct i2c_adapter *i2c)
	state->demod = demod;

	/* setup the demod data */
	memcpy(demod, &drxj_default_demod_g, sizeof(struct drx_demod_instance));

	demod->my_i2c_dev_addr = demod_addr;
	demod->my_common_attr = demod_comm_attr;
	demod->my_i2c_dev_addr->user_data = state;