[PATCH] net: lwip: tftp: Do not write past buffer end
Michal Simek
michal.simek at amd.com
Mon Jan 12 08:40:22 CET 2026
On 1/9/26 16:56, Andrew Goodbody wrote:
> sprintf will add a trailing \0 so manually adding a trailing \0 will
> result in an extra unaccounted for character being written. This
> overwrote the first byte of the following allocation block resulting in
> unexpected behaviour.
behavior
I think it would be also good to say how that issue was found.
That calling pxe get multiple times was the first symptom which was able to
stuck bootloader.
>
> Fixes: 27d7ccda94fa ("net: lwip: tftp: add support of blksize option to client")
Origin Jerome's patch wasn't merged upstream. Do you have any plan to send v3 of it?
https://savannah.nongnu.org/patch/index.php?10462
>
> Signed-off-by: Andrew Goodbody <andrew.goodbody at linaro.org>
> ---
> lib/lwip/lwip/src/apps/tftp/tftp.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/lib/lwip/lwip/src/apps/tftp/tftp.c b/lib/lwip/lwip/src/apps/tftp/tftp.c
> index ecb6c55ae1100779187e7b138d098a0ef1e48ca1..25da952e92566cbca1c64bc89c89102e74d0a42c 100644
> --- a/lib/lwip/lwip/src/apps/tftp/tftp.c
> +++ b/lib/lwip/lwip/src/apps/tftp/tftp.c
> @@ -191,7 +191,7 @@ send_request(const ip_addr_t *addr, u16_t port, u16_t opcode, const char* fname,
> MEMCPY(payload+2, fname, fname_length);
> MEMCPY(payload+2+fname_length, mode, mode_length);
> if (tftp_state.blksize)
> - sprintf(payload+2+fname_length+mode_length, "blksize%c%d%c", 0, tftp_state.blksize, 0);
> + sprintf(payload+2+fname_length+mode_length, "blksize%c%d", 0, tftp_state.blksize);
>
> tftp_state.wait_oack = true;
> ret = udp_sendto(tftp_state.upcb, p, addr, port);
>
> ---
> base-commit: c05dba22f1f2b0b2655ee3971644acf1936cd07a
> change-id: 20260109-tftp_fix-3ab9bd66a6ad
>
> Best regards,
With above commit message fix feel free to add
Reported-by: Michal Simek <michal.simek at amd.com>
Tested-by: Michal Simek <michal.simek at amd.com>
Thanks,
Michal
More information about the U-Boot
mailing list