Unverified Commit 83226bd6 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!7084 [sync] PR-7013: media: edia: dvbdev: fix a use-after-free

parents 47db1dba b182ddbf
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -498,6 +498,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
		dvbdevfops = kmemdup(template->fops, sizeof(*dvbdevfops), GFP_KERNEL);
		if (!dvbdevfops) {
			kfree(dvbdev);
			*pdvbdev = NULL;
			mutex_unlock(&dvbdev_register_lock);
			return -ENOMEM;
		}
@@ -506,6 +507,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
		if (!new_node) {
			kfree(dvbdevfops);
			kfree(dvbdev);
			*pdvbdev = NULL;
			mutex_unlock(&dvbdev_register_lock);
			return -ENOMEM;
		}
@@ -538,6 +540,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
		}
		list_del (&dvbdev->list_head);
		kfree(dvbdev);
		*pdvbdev = NULL;
		up_write(&minor_rwsem);
		mutex_unlock(&dvbdev_register_lock);
		return -EINVAL;
@@ -560,6 +563,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
		dvb_media_device_free(dvbdev);
		list_del (&dvbdev->list_head);
		kfree(dvbdev);
		*pdvbdev = NULL;
		mutex_unlock(&dvbdev_register_lock);
		return ret;
	}
@@ -578,6 +582,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
		dvb_media_device_free(dvbdev);
		list_del (&dvbdev->list_head);
		kfree(dvbdev);
		*pdvbdev = NULL;
		mutex_unlock(&dvbdev_register_lock);
		return PTR_ERR(clsdev);
	}