[PATCH] net: tftp: Fix for DATA ACK for block count out of order
Ramon Fried
rfried.dev at gmail.com
Tue Jan 10 18:10:11 CET 2023
On Thu, Jan 5, 2023 at 4:16 AM <seanedmond at linux.microsoft.com> wrote:
>
> From: Sean Edmond <seanedmond at linux.microsoft.com>
>
> In rfc7440, if an ACK is not received by the server or if the
> last data block in a window is dropped, the server will timeout and
> retransmit the window. In this case, the block count received will be
> less than the internal block count. In this case, the client
> should not ACK. ACK should only be sent if the received block
> count is greater than the expected block count.
>
> Signed-off-by: Sean Edmond <seanedmond at linux.microsoft.com>
> ---
> net/tftp.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/net/tftp.c b/net/tftp.c
> index c780c33f37..51e062bddf 100644
> --- a/net/tftp.c
> +++ b/net/tftp.c
> @@ -592,6 +592,14 @@ static void tftp_handler(uchar *pkt, unsigned dest, struct in_addr sip,
> debug("Received unexpected block: %d, expected: %d\n",
> ntohs(*(__be16 *)pkt),
> (ushort)(tftp_cur_block + 1));
> + /*
> + * Only ACK if the block count received is greater than
> + * the expected block count, otherwise skip ACK.
> + * (required to properly handle the server retransmitting
> + * the window)
> + */
> + if ((ushort)(tftp_cur_block + 1) - (short)(ntohs(*(__be16 *)pkt)) > 0)
> + break;
> /*
> * If one packet is dropped most likely
> * all other buffers in the window
> --
> 2.39.0
>
Reviewed-by: Ramon Fried <rfried.dev at gmail.com>
More information about the U-Boot
mailing list