From: Pali Rohár Date: Fri, 24 Sep 2021 21:06:43 +0000 (+0200) Subject: tools: kwboot: Fix kwboot_xm_sendblock() function when kwboot_tty_recv() fails X-Git-Url: http://git.dujemihanovic.xyz/?a=commitdiff_plain;h=00a1deed1c8d5005499ac7a3c1c337de27102eee;p=u-boot.git tools: kwboot: Fix kwboot_xm_sendblock() function when kwboot_tty_recv() fails When kwboot_tty_recv() fails or times out, it does not set the `c` variable to NAK. The variable is then compared, while it holds either an undefined value or a value from previous iteration. Set `c` to NAK so that the other side will try to resend current block, and remove the now unnecessary break. In other failure cases return immediately. Signed-off-by: Pali Rohár Reviewed-by: Marek Behún Reviewed-by: Stefan Roese --- diff --git a/tools/kwboot.c b/tools/kwboot.c index 454339db14..b9a402ca91 100644 --- a/tools/kwboot.c +++ b/tools/kwboot.c @@ -380,12 +380,15 @@ kwboot_xm_sendblock(int fd, struct kwboot_block *block) do { rc = kwboot_tty_send(fd, block, sizeof(*block)); if (rc) - break; + return rc; do { rc = kwboot_tty_recv(fd, &c, 1, blk_rsp_timeo); - if (rc) - break; + if (rc) { + if (errno != ETIMEDOUT) + return rc; + c = NAK; + } if (c != ACK && c != NAK && c != CAN) printf("%c", c);