media: dvbdev: fix the logic when DVB_DYNAMIC_MINORS is not set
commit a4aebaf6e6efff548b01a3dc49b4b9074751c15b upstream. When CONFIG_DVB_DYNAMIC_MINORS, ret is not initialized, and a semaphore is left at the wrong state, in case of errors. Make the code simpler and avoid mistakes by having just one error check logic used weather DVB_DYNAMIC_MINORS is used or not. Reported-by: kernel test robot <lkp@intel.com> Reported-by: Dan Carpenter <dan.carpenter@linaro.org> Closes: https://lore.kernel.org/r/202410201717.ULWWdJv8-lkp@intel.com/ Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Link: https://lore.kernel.org/r/9e067488d8935b8cf00959764a1fa5de85d65725.1730926254.git.mchehab+huawei@kernel.org Cc: Nathan Chancellor <nathan@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
a465efacba
commit
0f91fbca50
1 changed files with 4 additions and 11 deletions
|
@ -544,6 +544,9 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
|
||||||
for (minor = 0; minor < MAX_DVB_MINORS; minor++)
|
for (minor = 0; minor < MAX_DVB_MINORS; minor++)
|
||||||
if (dvb_minors[minor] == NULL)
|
if (dvb_minors[minor] == NULL)
|
||||||
break;
|
break;
|
||||||
|
#else
|
||||||
|
minor = nums2minor(adap->num, type, id);
|
||||||
|
#endif
|
||||||
if (minor >= MAX_DVB_MINORS) {
|
if (minor >= MAX_DVB_MINORS) {
|
||||||
if (new_node) {
|
if (new_node) {
|
||||||
list_del (&new_node->list_head);
|
list_del (&new_node->list_head);
|
||||||
|
@ -557,17 +560,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
|
||||||
mutex_unlock(&dvbdev_register_lock);
|
mutex_unlock(&dvbdev_register_lock);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
minor = nums2minor(adap->num, type, id);
|
|
||||||
if (minor >= MAX_DVB_MINORS) {
|
|
||||||
dvb_media_device_free(dvbdev);
|
|
||||||
list_del(&dvbdev->list_head);
|
|
||||||
kfree(dvbdev);
|
|
||||||
*pdvbdev = NULL;
|
|
||||||
mutex_unlock(&dvbdev_register_lock);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
dvbdev->minor = minor;
|
dvbdev->minor = minor;
|
||||||
dvb_minors[minor] = dvb_device_get(dvbdev);
|
dvb_minors[minor] = dvb_device_get(dvbdev);
|
||||||
up_write(&minor_rwsem);
|
up_write(&minor_rwsem);
|
||||||
|
|
Loading…
Add table
Reference in a new issue