[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