From mboxrd@z Thu Jan 1 00:00:00 1970 From: Martin Fuzzey Date: Mon, 22 Oct 2018 18:31:08 +0200 Subject: [U-Boot] [PATCH] w1: fix data abort if no one wire bus master present In-Reply-To: <1540225879-17841-1-git-send-email-martin.fuzzey@flowbird.group> References: <1540225879-17841-1-git-send-email-martin.fuzzey@flowbird.group> Message-ID: <1540225879-17841-2-git-send-email-martin.fuzzey@flowbird.group> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de When the "w1 bus" command is used with no bus master present a data abort may occur. This is because uclass_first_device() returns zero, but sets the output struct udevice pointer to NULL in the no device found case. Fix w1_get_bus() to account for this and return an error code as is expected by the callers. Signed-off-by: Martin Fuzzey --- drivers/w1/w1-uclass.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/w1/w1-uclass.c b/drivers/w1/w1-uclass.c index aecf7fe..cb41b68 100644 --- a/drivers/w1/w1-uclass.c +++ b/drivers/w1/w1-uclass.c @@ -115,17 +115,19 @@ int w1_get_bus(int busnum, struct udevice **busp) struct udevice *dev; for (ret = uclass_first_device(UCLASS_W1, &dev); - !ret; - uclass_next_device(&dev), i++) { - if (ret) { - debug("Cannot find w1 bus %d\n", busnum); - return ret; - } + dev && !ret; + ret = uclass_next_device(&dev), i++) { if (i == busnum) { *busp = dev; return 0; } } + + if (!ret) { + debug("Cannot find w1 bus %d\n", busnum); + ret = -ENODEV; + } + return ret; } -- 1.9.1