From 37ac880897b0d53bfe2bfbfc1e03078039ec9846 Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Fri, 25 Apr 2025 01:21:57 +0300 Subject: [PATCH 1/2] Applying Arch Linux Patch https://gitlab.archlinux.org/archlinux/packaging/packages/tftp-hpa/-/blob/a70146278f2d494448a831b29cd6fa955e352b2a/tftp-hpa-0.49-fortify-strcpy-crash.patch --- tftp/tftp.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tftp/tftp.c b/tftp/tftp.c index 33a4175..9c9c5af 100644 --- a/tftp/tftp.c +++ b/tftp/tftp.c @@ -278,15 +278,16 @@ makerequest(int request, const char *name, struct tftphdr *tp, const char *mode) { char *cp; + size_t len; tp->th_opcode = htons((u_short) request); cp = (char *)&(tp->th_stuff); - strcpy(cp, name); - cp += strlen(name); - *cp++ = '\0'; - strcpy(cp, mode); - cp += strlen(mode); - *cp++ = '\0'; + len = strlen(name) + 1; + memcpy(cp, name, len); + cp += len; + len = strlen(mode) + 1; + memcpy(cp, mode, len); + cp += len; return (cp - (char *)tp); } From 1dd16bc0df85f556db194168cd6e37f2d892b927 Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Fri, 25 Apr 2025 01:23:54 +0300 Subject: [PATCH 2/2] doesn't flush by default, so the prompt is never printed https://gitlab.alpinelinux.org/alpine/aports/-/blob/3.21-stable/main/tftp-hpa/fix-prompt-flush.patch --- tftp/main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tftp/main.c b/tftp/main.c index ac06330..ecdc0e0 100644 --- a/tftp/main.c +++ b/tftp/main.c @@ -806,6 +806,7 @@ static void command(void) exit(0); /* EOF */ #else fputs(prompt, stdout); + fflush(stdout); if (fgets(line, LBUFLEN, stdin) == 0) { if (feof(stdin)) { exit(0);