err is evaluated in a ternary condition on return, but if the while loop is never entered, it is left uninitialized. Fix this. Reported-by: clang-analyzer-10 Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- drivers/hw_random/mxc-rngc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/hw_random/mxc-rngc.c b/drivers/hw_random/mxc-rngc.c index 3ed25aa61d05..075c20e43745 100644 --- a/drivers/hw_random/mxc-rngc.c +++ b/drivers/hw_random/mxc-rngc.c @@ -133,7 +133,7 @@ static int mxc_rngc_data_present(struct hwrng *rng) static int mxc_rngc_read(struct hwrng *rng, void *buf, size_t max, bool wait) { struct mxc_rngc *rngc = container_of(rng, struct mxc_rngc, rng); - unsigned int err; + unsigned int err = 0; int count = 0; u32 *data = buf; -- 2.28.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
When there are no nvvars, the function returns an uninitialized ret, return 0 in this case instead. Reported-by: clang-analyzer-10 Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- common/globalvar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/globalvar.c b/common/globalvar.c index 09479da548f6..904acb94d730 100644 --- a/common/globalvar.c +++ b/common/globalvar.c @@ -674,7 +674,7 @@ int nvvar_save(void) { struct param_d *param; const char *env = default_environment_path_get(); - int ret; + int ret = 0; #define TMPDIR "/.env.tmp" if (!nv_dirty || !env) return 0; -- 2.28.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
Depending on passed options, uimage may never assign ret a value. Fix this by returning COMMAND_SUCCESS by default. Reported-by: clang-analyzer-10 Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- commands/uimage.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/commands/uimage.c b/commands/uimage.c index 982da7101aa7..fb4df780bdd0 100644 --- a/commands/uimage.c +++ b/commands/uimage.c @@ -19,7 +19,7 @@ static int uimage_flush(void *buf, unsigned int len) static int do_uimage(int argc, char *argv[]) { struct uimage_handle *handle; - int ret; + int ret = 0; int verify = 0; int fd; int opt; @@ -84,7 +84,7 @@ static int do_uimage(int argc, char *argv[]) err: uimage_close(handle); - return ret ? 1 : 0; + return ret ? COMMAND_ERROR : COMMAND_SUCCESS; } BAREBOX_CMD_HELP_START(uimage) -- 2.28.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
Instead of storing the clk into the driver's device-specific private data, just store the rate and make sure it's != 0 on probe. This aligns us with what Linux does for the STM32 IWDG and DW WDT. Reported-by: clang-analyzer-10 Cc: Oleksij Rempel <o.rempel@pengutronix.de> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- drivers/watchdog/ar9344_wdt.c | 21 ++++++++++++++------- drivers/watchdog/dw_wdt.c | 19 ++++++++++++------- drivers/watchdog/stm32_iwdg.c | 2 ++ 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/drivers/watchdog/ar9344_wdt.c b/drivers/watchdog/ar9344_wdt.c index 4615288631d6..c7cd552dc711 100644 --- a/drivers/watchdog/ar9344_wdt.c +++ b/drivers/watchdog/ar9344_wdt.c @@ -34,8 +34,8 @@ struct ar9344_wd { struct watchdog wd; void __iomem *base; - struct clk *clk; struct device_d *dev; + unsigned int rate; }; static int ar9344_watchdog_set_timeout(struct watchdog *wd, unsigned timeout) @@ -45,7 +45,7 @@ static int ar9344_watchdog_set_timeout(struct watchdog *wd, unsigned timeout) if (timeout) { ctrl = AR9344_WD_CTRL_ACTION_FCR; - val = timeout * clk_get_rate(priv->clk); + val = timeout * priv->rate; } else { ctrl = AR9344_WD_CTRL_ACTION_NONE; val = U32_MAX; @@ -74,6 +74,7 @@ static int ar9344_wdt_probe(struct device_d *dev) { struct resource *iores; struct ar9344_wd *priv; + struct clk *clk; int ret; priv = xzalloc(sizeof(struct ar9344_wd)); @@ -93,16 +94,22 @@ static int ar9344_wdt_probe(struct device_d *dev) ar9344_watchdog_detect_reset_source(priv); - priv->clk = clk_get(dev, NULL); - if (IS_ERR(priv->clk)) { + clk = clk_get(dev, NULL); + if (IS_ERR(clk)) { dev_err(dev, "could not get clk\n"); - ret = PTR_ERR(priv->clk); + ret = PTR_ERR(clk); goto on_error; } - clk_enable(priv->clk); + clk_enable(clk); - priv->wd.timeout_max = U32_MAX / clk_get_rate(priv->clk); + priv->rate = clk_get_rate(clk); + if (priv->rate == 0) { + ret = -EINVAL; + goto on_error; + } + + priv->wd.timeout_max = U32_MAX / priv->rate; ret = watchdog_register(&priv->wd); if (ret) diff --git a/drivers/watchdog/dw_wdt.c b/drivers/watchdog/dw_wdt.c index cb0d17e3610b..17771c712644 100644 --- a/drivers/watchdog/dw_wdt.c +++ b/drivers/watchdog/dw_wdt.c @@ -41,10 +41,10 @@ struct dw_wdt { void __iomem *regs; - struct clk *clk; struct restart_handler restart; struct watchdog wdd; struct reset_control *rst; + unsigned int rate; }; #define to_dw_wdt(wdd) container_of(wdd, struct dw_wdt, wdd) @@ -55,7 +55,7 @@ static inline int dw_wdt_top_in_seconds(struct dw_wdt *dw_wdt, unsigned top) * There are 16 possible timeout values in 0..15 where the number of * cycles is 2 ^ (16 + i) and the watchdog counts down. */ - return (1U << (16 + top)) / clk_get_rate(dw_wdt->clk); + return (1U << (16 + top)) / dw_wdt->rate; } static int dw_wdt_start(struct watchdog *wdd) @@ -134,6 +134,7 @@ static int dw_wdt_drv_probe(struct device_d *dev) struct watchdog *wdd; struct dw_wdt *dw_wdt; struct resource *mem; + struct clk *clk; int ret; dw_wdt = xzalloc(sizeof(*dw_wdt)); @@ -143,11 +144,11 @@ static int dw_wdt_drv_probe(struct device_d *dev) if (IS_ERR(dw_wdt->regs)) return PTR_ERR(dw_wdt->regs); - dw_wdt->clk = clk_get(dev, NULL); - if (IS_ERR(dw_wdt->clk)) - return PTR_ERR(dw_wdt->clk); + clk = clk_get(dev, NULL); + if (IS_ERR(clk)) + return PTR_ERR(clk); - ret = clk_enable(dw_wdt->clk); + ret = clk_enable(clk); if (ret) return ret; @@ -160,6 +161,10 @@ static int dw_wdt_drv_probe(struct device_d *dev) wdd->hwdev = dev; wdd->set_timeout = dw_wdt_set_timeout; + dw_wdt->rate = clk_get_rate(clk); + if (dw_wdt->rate == 0) + return -EINVAL; + ret = watchdog_register(wdd); if (ret) goto out_disable_clk; @@ -179,7 +184,7 @@ static int dw_wdt_drv_probe(struct device_d *dev) return 0; out_disable_clk: - clk_disable(dw_wdt->clk); + clk_disable(clk); return ret; } diff --git a/drivers/watchdog/stm32_iwdg.c b/drivers/watchdog/stm32_iwdg.c index 9e38f1a669f2..4d7a263b7e62 100644 --- a/drivers/watchdog/stm32_iwdg.c +++ b/drivers/watchdog/stm32_iwdg.c @@ -157,6 +157,8 @@ static int stm32_iwdg_probe(struct device_d *dev) return ret; wd->rate = clk_get_rate(clk); + if (wd->rate == 0) + return -EINVAL; if (data->has_pclk) { clk = clk_get(dev, "pclk"); -- 2.28.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
The primitives asix_mdio_write and asix_mdio_read use return errors, but are unchecked. Propagate them instead. Reported-by: clang-analyzer-10 [afa: Untested on real hardware] Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- drivers/net/usb/asix.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/drivers/net/usb/asix.c b/drivers/net/usb/asix.c index 3ca27ff0270e..fc7063095b6c 100644 --- a/drivers/net/usb/asix.c +++ b/drivers/net/usb/asix.c @@ -252,11 +252,19 @@ static int asix_mdio_read(struct mii_bus *bus, int phy_id, int loc) { struct usbnet *dev = bus->priv; __le16 res; + int ret; + + ret = asix_set_sw_mii(dev); + if (ret) + return ret; - asix_set_sw_mii(dev); - asix_read_cmd(dev, AX_CMD_READ_MII_REG, phy_id, - (__u16)loc, 2, &res); - asix_set_hw_mii(dev); + ret = asix_read_cmd(dev, AX_CMD_READ_MII_REG, phy_id, (__u16)loc, 2, &res); + if (ret) + return ret; + + ret = asix_set_hw_mii(dev); + if (ret) + return ret; dev_dbg(&dev->edev.dev, "asix_mdio_read() phy_id=0x%02x, loc=0x%02x, returns=0x%04x\n", phy_id, loc, le16_to_cpu(res)); @@ -268,15 +276,20 @@ static int asix_mdio_write(struct mii_bus *bus, int phy_id, int loc, u16 val) { struct usbnet *dev = bus->priv; __le16 res = cpu_to_le16(val); + int ret; dev_dbg(&dev->edev.dev, "asix_mdio_write() phy_id=0x%02x, loc=0x%02x, val=0x%04x\n", phy_id, loc, val); - asix_set_sw_mii(dev); - asix_write_cmd(dev, AX_CMD_WRITE_MII_REG, phy_id, (__u16)loc, 2, &res); - asix_set_hw_mii(dev); + ret = asix_set_sw_mii(dev); + if (ret) + return ret; - return 0; + ret = asix_write_cmd(dev, AX_CMD_WRITE_MII_REG, phy_id, (__u16)loc, 2, &res); + if (ret) + return ret; + + return asix_set_hw_mii(dev); } static inline int asix_get_phy_addr(struct usbnet *dev) -- 2.28.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
Some automatic variables are currently cleared as they may contain "sensitive info". Any proper compiler would optimize away these dead stores anyway, so just drop them. Reported-by: clang-analyzer-10 Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- crypto/sha2.c | 4 ---- crypto/sha4.c | 3 --- 2 files changed, 7 deletions(-) diff --git a/crypto/sha2.c b/crypto/sha2.c index 3947a09f41bb..013f5bb3b248 100644 --- a/crypto/sha2.c +++ b/crypto/sha2.c @@ -211,10 +211,6 @@ static void sha256_transform(u32 *state, const u8 *input) state[0] += a; state[1] += b; state[2] += c; state[3] += d; state[4] += e; state[5] += f; state[6] += g; state[7] += h; - - /* clear any sensitive info... */ - a = b = c = d = e = f = g = h = t1 = t2 = 0; - memset(W, 0, 64 * sizeof(u32)); } static int sha224_init(struct digest *desc) diff --git a/crypto/sha4.c b/crypto/sha4.c index aad8081fa5b7..a2e90c0a2cae 100644 --- a/crypto/sha4.c +++ b/crypto/sha4.c @@ -124,9 +124,6 @@ sha512_transform(u64 *state, const u8 *input) state[0] += a; state[1] += b; state[2] += c; state[3] += d; state[4] += e; state[5] += f; state[6] += g; state[7] += h; - - /* erase our data */ - a = b = c = d = e = f = g = h = t1 = t2 = 0; } static int -- 2.28.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
The assignment to val at this location serves no purpose, drop it to reduce clutter. Reported-by: clang-analyzer-10 Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- common/memsize.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/memsize.c b/common/memsize.c index 915ab87b340a..2fd2b7145759 100644 --- a/common/memsize.c +++ b/common/memsize.c @@ -58,7 +58,7 @@ long get_ram_size(volatile long *base, long maxsize) *addr = 0; sync (); - if ((val = *addr) != 0) { + if (*addr != 0) { /* Restore the original data before leaving the function. */ sync (); -- 2.28.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
Reading the interrupt registers has a side-effect, so their value need not be used for anythig. Storing it into a variable never read obfuscates this however. Cast to (void) for clarity. Reported-by: clang-analyzer-10 Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- drivers/usb/musb/musb_core.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 9fdef8679b88..266663a9b0ec 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -330,7 +330,6 @@ void musb_load_testpacket(struct musb *musb) static void musb_generic_disable(struct musb *musb) { void __iomem *mbase = musb->mregs; - u16 temp; /* disable interrupts */ musb_writeb(mbase, MUSB_INTRUSBE, 0); @@ -343,9 +342,9 @@ static void musb_generic_disable(struct musb *musb) musb_writeb(mbase, MUSB_DEVCTL, 0); /* flush pending interrupts */ - temp = musb_readb(mbase, MUSB_INTRUSB); - temp = musb_readw(mbase, MUSB_INTRTX); - temp = musb_readw(mbase, MUSB_INTRRX); + (void)musb_readb(mbase, MUSB_INTRUSB); + (void)musb_readw(mbase, MUSB_INTRTX); + (void)musb_readw(mbase, MUSB_INTRRX); } -- 2.28.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
barebox doesn't do extended attributes in SquashFS. Remove the left-over xattr_id that's never read. Reported-by: clang-analyzer-10 Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- fs/squashfs/inode.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/fs/squashfs/inode.c b/fs/squashfs/inode.c index 64155d47dbf4..f702f6c0a2d9 100644 --- a/fs/squashfs/inode.c +++ b/fs/squashfs/inode.c @@ -108,7 +108,6 @@ int squashfs_read_inode(struct inode *inode, long long ino) int err, type, offset = SQUASHFS_INODE_OFFSET(ino); union squashfs_inode squashfs_ino; struct squashfs_base_inode *sqshb_ino = &squashfs_ino.base; - int xattr_id = SQUASHFS_INVALID_XATTR; TRACE("Entered squashfs_read_inode: %lld\n", ino); @@ -197,7 +196,6 @@ int squashfs_read_inode(struct inode *inode, long long ino) frag_offset = 0; } - xattr_id = le32_to_cpu(sqsh_ino->xattr); inode->i_size = le64_to_cpu(sqsh_ino->file_size); inode->i_op = &squashfs_inode_ops; inode->i_mode |= S_IFREG; @@ -249,7 +247,6 @@ int squashfs_read_inode(struct inode *inode, long long ino) if (err < 0) goto failed_read; - xattr_id = le32_to_cpu(sqsh_ino->xattr); inode->i_size = le32_to_cpu(sqsh_ino->file_size); inode->i_op = &squashfs_dir_inode_ops; inode->i_fop = &squashfs_dir_ops; @@ -294,7 +291,6 @@ int squashfs_read_inode(struct inode *inode, long long ino) &offset, sizeof(xattr)); if (err < 0) goto failed_read; - xattr_id = le32_to_cpu(xattr); } TRACE("Symbolic link inode %x:%x, start_block %llx, offset " @@ -338,7 +334,6 @@ int squashfs_read_inode(struct inode *inode, long long ino) inode->i_mode |= S_IFCHR; else inode->i_mode |= S_IFBLK; - xattr_id = le32_to_cpu(sqsh_ino->xattr); rdev = le32_to_cpu(sqsh_ino->rdev); TRACE("Device inode %x:%x, rdev %x\n", @@ -375,7 +370,6 @@ int squashfs_read_inode(struct inode *inode, long long ino) inode->i_mode |= S_IFIFO; else inode->i_mode |= S_IFSOCK; - xattr_id = le32_to_cpu(sqsh_ino->xattr); break; } default: -- 2.28.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
rstc is never read before written, so just drop the initializer. Reported-by: clang-analyzer-10 Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- drivers/reset/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index 99b9c806550c..26a54f21dff0 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -150,7 +150,7 @@ EXPORT_SYMBOL_GPL(reset_control_deassert); static struct reset_control *of_reset_control_get(struct device_node *node, const char *id) { - struct reset_control *rstc = ERR_PTR(-ENODEV); + struct reset_control *rstc; struct reset_controller_dev *r, *rcdev; struct of_phandle_args args; int index = 0; -- 2.28.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
hf->base may remain uninitialized if an image is > 4G, but sandbox barebox is compiled for 32-bit. Fix this. Reported-by: clang-analyzer-10 Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- arch/sandbox/os/common.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/arch/sandbox/os/common.c b/arch/sandbox/os/common.c index 43ee95edb6e3..72bb35464f25 100644 --- a/arch/sandbox/os/common.c +++ b/arch/sandbox/os/common.c @@ -289,6 +289,7 @@ static int add_image(const char *_str, char *devname_template, int *devname_numb hf->fd = fd; hf->filename = filename; hf->is_blockdev = blkdev; + hf->base = (unsigned long)MAP_FAILED; if (fd < 0) { perror("open"); @@ -311,15 +312,16 @@ static int add_image(const char *_str, char *devname_template, int *devname_numb if (!cdev) hf->is_blockdev = 1; } - if (hf->size <= SIZE_MAX) + if (hf->size <= SIZE_MAX) { hf->base = (unsigned long)mmap(NULL, hf->size, PROT_READ | (readonly ? 0 : PROT_WRITE), MAP_SHARED, fd, 0); - else - printf("warning: %s: contiguous map failed\n", filename); - if (hf->base == (unsigned long)MAP_FAILED) - printf("warning: mmapping %s failed: %s\n", filename, strerror(errno)); + if (hf->base == (unsigned long)MAP_FAILED) + printf("warning: mmapping %s failed: %s\n", filename, strerror(errno)); + } else { + printf("warning: %s: contiguous map failed\n", filename); + } if (blkdev && hf->size % 512 != 0) { printf("warning: registering %s as block device failed: invalid block size\n", -- 2.28.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
cdev is assigned for each loop iteration and consumed inside. The initial value is never read, so drop it. Reported-by: clang-analyzer-10 Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- common/blspec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/blspec.c b/common/blspec.c index 9499d32477d9..a07343f4274e 100644 --- a/common/blspec.c +++ b/common/blspec.c @@ -766,7 +766,7 @@ int blspec_scan_devices(struct bootentries *bootentries) device_detect(dev); for_each_block_device(bdev) { - struct cdev *cdev = &bdev->cdev; + struct cdev *cdev; list_for_each_entry(cdev, &bdev->dev->cdevs, devices_list) { ret = blspec_scan_cdev(bootentries, cdev); -- 2.28.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
usb_control_msg doesn't (always) return 0 on success. Adjust the error checks to explicitly check for negative return values instead. Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- Should probably be tested before applying. Sascha, can you easily do this? --- drivers/net/usb/asix.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/net/usb/asix.c b/drivers/net/usb/asix.c index fc7063095b6c..1140be9d1601 100644 --- a/drivers/net/usb/asix.c +++ b/drivers/net/usb/asix.c @@ -255,15 +255,15 @@ static int asix_mdio_read(struct mii_bus *bus, int phy_id, int loc) int ret; ret = asix_set_sw_mii(dev); - if (ret) + if (ret < 0) return ret; ret = asix_read_cmd(dev, AX_CMD_READ_MII_REG, phy_id, (__u16)loc, 2, &res); - if (ret) + if (ret < 0) return ret; ret = asix_set_hw_mii(dev); - if (ret) + if (ret < 0) return ret; dev_dbg(&dev->edev.dev, "asix_mdio_read() phy_id=0x%02x, loc=0x%02x, returns=0x%04x\n", @@ -282,14 +282,18 @@ static int asix_mdio_write(struct mii_bus *bus, int phy_id, int loc, u16 val) phy_id, loc, val); ret = asix_set_sw_mii(dev); - if (ret) + if (ret < 0) return ret; ret = asix_write_cmd(dev, AX_CMD_WRITE_MII_REG, phy_id, (__u16)loc, 2, &res); - if (ret) + if (ret < 0) return ret; - return asix_set_hw_mii(dev); + ret = asix_set_hw_mii(dev); + if (ret < 0) + return ret; + + return 0; } static inline int asix_get_phy_addr(struct usbnet *dev) -- 2.28.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
On Wed, Sep 30, 2020 at 09:24:57AM +0200, Ahmad Fatoum wrote: > usb_control_msg doesn't (always) return 0 on success. > Adjust the error checks to explicitly check for negative return values > instead. > > Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> > --- > Should probably be tested before applying. Sascha, can you easily do > this? I tested this and can confirm this patch fixes the breakage from the last patch ;) Sascha > --- > drivers/net/usb/asix.c | 16 ++++++++++------ > 1 file changed, 10 insertions(+), 6 deletions(-) > > diff --git a/drivers/net/usb/asix.c b/drivers/net/usb/asix.c > index fc7063095b6c..1140be9d1601 100644 > --- a/drivers/net/usb/asix.c > +++ b/drivers/net/usb/asix.c > @@ -255,15 +255,15 @@ static int asix_mdio_read(struct mii_bus *bus, int phy_id, int loc) > int ret; > > ret = asix_set_sw_mii(dev); > - if (ret) > + if (ret < 0) > return ret; > > ret = asix_read_cmd(dev, AX_CMD_READ_MII_REG, phy_id, (__u16)loc, 2, &res); > - if (ret) > + if (ret < 0) > return ret; > > ret = asix_set_hw_mii(dev); > - if (ret) > + if (ret < 0) > return ret; > > dev_dbg(&dev->edev.dev, "asix_mdio_read() phy_id=0x%02x, loc=0x%02x, returns=0x%04x\n", > @@ -282,14 +282,18 @@ static int asix_mdio_write(struct mii_bus *bus, int phy_id, int loc, u16 val) > phy_id, loc, val); > > ret = asix_set_sw_mii(dev); > - if (ret) > + if (ret < 0) > return ret; > > ret = asix_write_cmd(dev, AX_CMD_WRITE_MII_REG, phy_id, (__u16)loc, 2, &res); > - if (ret) > + if (ret < 0) > return ret; > > - return asix_set_hw_mii(dev); > + ret = asix_set_hw_mii(dev); > + if (ret < 0) > + return ret; > + > + return 0; > } > > static inline int asix_get_phy_addr(struct usbnet *dev) > -- > 2.28.0 > > > _______________________________________________ > barebox mailing list > barebox@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/barebox > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
On Wed, Sep 30, 2020 at 09:19:54AM +0200, Ahmad Fatoum wrote: > err is evaluated in a ternary condition on return, but if the while > loop is never entered, it is left uninitialized. Fix this. > > Reported-by: clang-analyzer-10 > Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> > --- > drivers/hw_random/mxc-rngc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) Applied, thanks Sascha > > diff --git a/drivers/hw_random/mxc-rngc.c b/drivers/hw_random/mxc-rngc.c > index 3ed25aa61d05..075c20e43745 100644 > --- a/drivers/hw_random/mxc-rngc.c > +++ b/drivers/hw_random/mxc-rngc.c > @@ -133,7 +133,7 @@ static int mxc_rngc_data_present(struct hwrng *rng) > static int mxc_rngc_read(struct hwrng *rng, void *buf, size_t max, bool wait) > { > struct mxc_rngc *rngc = container_of(rng, struct mxc_rngc, rng); > - unsigned int err; > + unsigned int err = 0; > int count = 0; > u32 *data = buf; > > -- > 2.28.0 > > > _______________________________________________ > barebox mailing list > barebox@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/barebox > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox