drivers/net/wireless/microchip/wilc1000/sdio.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
The wilc_sdio_read_size() calls wilc_sdio_cmd52() but does not check the
return value. This could lead to execution with potentially invalid data
if wilc_sdio_cmd52() fails. A proper implementation can be found in
wilc_sdio_read_reg().
Add error handling for wilc_sdio_cmd52(). If wilc_sdio_cmd52() fails,
log an error message via dev_err().
Fixes: 0e1af73ddeb9 ("staging/wilc1000: use proper naming for global symbols")
Cc: stable@vger.kernel.org # v4.15
Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
---
v2: Fix code error.
drivers/net/wireless/microchip/wilc1000/sdio.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/microchip/wilc1000/sdio.c b/drivers/net/wireless/microchip/wilc1000/sdio.c
index 5262c8846c13..8ff49b08bbd2 100644
--- a/drivers/net/wireless/microchip/wilc1000/sdio.c
+++ b/drivers/net/wireless/microchip/wilc1000/sdio.c
@@ -771,6 +771,7 @@ static int wilc_sdio_read_size(struct wilc *wilc, u32 *size)
{
u32 tmp;
struct sdio_cmd52 cmd;
+ struct sdio_func *func = dev_to_sdio_func(wilc->dev);
/**
* Read DMA count in words
@@ -780,12 +781,20 @@ static int wilc_sdio_read_size(struct wilc *wilc, u32 *size)
cmd.raw = 0;
cmd.address = WILC_SDIO_INTERRUPT_DATA_SZ_REG;
cmd.data = 0;
- wilc_sdio_cmd52(wilc, &cmd);
+ ret = wilc_sdio_cmd52(wilc, &cmd);
+ if (ret) {
+ dev_err(&func->dev, "Fail cmd 52, interrupt data register...\n");
+ return ret;
+ }
tmp = cmd.data;
cmd.address = WILC_SDIO_INTERRUPT_DATA_SZ_REG + 1;
cmd.data = 0;
- wilc_sdio_cmd52(wilc, &cmd);
+ ret = wilc_sdio_cmd52(wilc, &cmd);
+ if (ret) {
+ dev_err(&func->dev, "Fail cmd 52, interrupt data register...\n");
+ return ret;
+ }
tmp |= (cmd.data << 8);
*size = tmp;
--
2.42.0.windows.2
Hi Wentao,
kernel test robot noticed the following build errors:
[auto build test ERROR on wireless-next/main]
[also build test ERROR on wireless/main linus/master v6.15-rc7 next-20250516]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Wentao-Liang/wifi-wilc1000-Add-error-handling-for-wilc_sdio_cmd52/20250519-094706
base: https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git main
patch link: https://lore.kernel.org/r/20250519014434.901-1-vulab%40iscas.ac.cn
patch subject: [PATCH v2] wifi: wilc1000: Add error handling for wilc_sdio_cmd52()
config: hexagon-allmodconfig (https://download.01.org/0day-ci/archive/20250519/202505191448.OycntzLM-lkp@intel.com/config)
compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250519/202505191448.OycntzLM-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202505191448.OycntzLM-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/net/wireless/microchip/wilc1000/sdio.c:789:2: error: use of undeclared identifier 'ret'
789 | ret = wilc_sdio_cmd52(wilc, &cmd);
| ^
drivers/net/wireless/microchip/wilc1000/sdio.c:790:6: error: use of undeclared identifier 'ret'
790 | if (ret) {
| ^
drivers/net/wireless/microchip/wilc1000/sdio.c:792:10: error: use of undeclared identifier 'ret'
792 | return ret;
| ^
drivers/net/wireless/microchip/wilc1000/sdio.c:798:2: error: use of undeclared identifier 'ret'
798 | ret = wilc_sdio_cmd52(wilc, &cmd);
| ^
drivers/net/wireless/microchip/wilc1000/sdio.c:799:6: error: use of undeclared identifier 'ret'
799 | if (ret) {
| ^
drivers/net/wireless/microchip/wilc1000/sdio.c:801:10: error: use of undeclared identifier 'ret'
801 | return ret;
| ^
6 errors generated.
vim +/ret +789 drivers/net/wireless/microchip/wilc1000/sdio.c
774
775 static int wilc_sdio_read_size(struct wilc *wilc, u32 *size)
776 {
777 u32 tmp;
778 struct sdio_cmd52 cmd;
779 struct sdio_func *func = dev_to_sdio_func(wilc->dev);
780
781 /**
782 * Read DMA count in words
783 **/
784 cmd.read_write = 0;
785 cmd.function = 0;
786 cmd.raw = 0;
787 cmd.address = WILC_SDIO_INTERRUPT_DATA_SZ_REG;
788 cmd.data = 0;
> 789 ret = wilc_sdio_cmd52(wilc, &cmd);
790 if (ret) {
791 dev_err(&func->dev, "Fail cmd 52, interrupt data register...\n");
792 return ret;
793 }
794 tmp = cmd.data;
795
796 cmd.address = WILC_SDIO_INTERRUPT_DATA_SZ_REG + 1;
797 cmd.data = 0;
798 ret = wilc_sdio_cmd52(wilc, &cmd);
799 if (ret) {
800 dev_err(&func->dev, "Fail cmd 52, interrupt data register...\n");
801 return ret;
802 }
803 tmp |= (cmd.data << 8);
804
805 *size = tmp;
806 return 0;
807 }
808
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
© 2016 - 2025 Red Hat, Inc.