Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

media: dvbdev: fix the logic when DVB_DYNAMIC_MINORS is not set

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

+4 -11
+4 -11
drivers/media/dvb-core/dvbdev.c
··· 530 530 for (minor = 0; minor < MAX_DVB_MINORS; minor++) 531 531 if (!dvb_minors[minor]) 532 532 break; 533 + #else 534 + minor = nums2minor(adap->num, type, id); 535 + #endif 533 536 if (minor >= MAX_DVB_MINORS) { 534 537 if (new_node) { 535 538 list_del(&new_node->list_head); ··· 546 543 mutex_unlock(&dvbdev_register_lock); 547 544 return -EINVAL; 548 545 } 549 - #else 550 - minor = nums2minor(adap->num, type, id); 551 - if (minor >= MAX_DVB_MINORS) { 552 - dvb_media_device_free(dvbdev); 553 - list_del(&dvbdev->list_head); 554 - kfree(dvbdev); 555 - *pdvbdev = NULL; 556 - mutex_unlock(&dvbdev_register_lock); 557 - return ret; 558 - } 559 - #endif 546 + 560 547 dvbdev->minor = minor; 561 548 dvb_minors[minor] = dvb_device_get(dvbdev); 562 549 up_write(&minor_rwsem);