| From 62d32058d31bd40b5f67ad70ef22084e3df54bc8 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 1 Oct 2019 13:24:39 -0700 |
| Subject: net: hisilicon: Fix usage of uninitialized variable in function |
| mdio_sc_cfg_reg_write() |
| |
| From: Yizhuo <yzhai003@ucr.edu> |
| |
| [ Upstream commit 53de429f4e88f538f7a8ec2b18be8c0cd9b2c8e1 ] |
| |
| In function mdio_sc_cfg_reg_write(), variable "reg_value" could be |
| uninitialized if regmap_read() fails. However, "reg_value" is used |
| to decide the control flow later in the if statement, which is |
| potentially unsafe. |
| |
| Signed-off-by: Yizhuo <yzhai003@ucr.edu> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/hisilicon/hns_mdio.c | 6 +++++- |
| 1 file changed, 5 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/net/ethernet/hisilicon/hns_mdio.c b/drivers/net/ethernet/hisilicon/hns_mdio.c |
| index baf5cc251f329..9a3bc0994a1db 100644 |
| --- a/drivers/net/ethernet/hisilicon/hns_mdio.c |
| +++ b/drivers/net/ethernet/hisilicon/hns_mdio.c |
| @@ -156,11 +156,15 @@ static int mdio_sc_cfg_reg_write(struct hns_mdio_device *mdio_dev, |
| { |
| u32 time_cnt; |
| u32 reg_value; |
| + int ret; |
| |
| regmap_write(mdio_dev->subctrl_vbase, cfg_reg, set_val); |
| |
| for (time_cnt = MDIO_TIMEOUT; time_cnt; time_cnt--) { |
| - regmap_read(mdio_dev->subctrl_vbase, st_reg, ®_value); |
| + ret = regmap_read(mdio_dev->subctrl_vbase, st_reg, ®_value); |
| + if (ret) |
| + return ret; |
| + |
| reg_value &= st_msk; |
| if ((!!check_st) == (!!reg_value)) |
| break; |
| -- |
| 2.20.1 |
| |