Hi list,
I think there's a bug in kwboot.
I have a faulty board that stops acking xmodem frames after a certain number of packets and kwboot
instead of exiting continues to send frames up to 100%.
With the one second retry timer it's very long! More than 2 hours :-(
The bug is in the kwboot_xm_sendblock() fonction :
https://gitlab.denx.de/u-boot/u-boot/blob/master/tools/kwboot.c#L375
kwboot_tty_recv detects the timeout but the return value is based on the last character received
(line 403)
The variable c is not initialized so if it keeps the previous value which is ACK => rc=0 => infinite
loop
There are several ways to fix the bug:
* Surround the "switch(c)" with a test:
if ( !((rc == -1) && (errno == ETIMEDOUT)) ) {
rc = -1;
switch (c) {
case ACK:
rc = 0;
break;
case NAK:
errno = EBADMSG;
break;
case CAN:
errno = ECANCELED;
break;
default:
errno = EPROTO;
break;
}
}
return rc;
* In the case of a TIMEOUT set c to a specific value and add the case in the
switch
Do you agree with my diagnosis?
What is the best solution to fix this bug?
Should I provide a patch?
Thank you,
Stephane