summaryrefslogtreecommitdiff
path: root/net-misc/iputils/files/iputils-20200821-fclose.patch
blob: cc370f0a5561df878a26ae11917ebd0f22d6613c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
From e1c3d09b412ad0d022178344b8cbf748dc60f17f Mon Sep 17 00:00:00 2001
From: Mike Gilbert <floppym@gentoo.org>
Date: Sun, 24 Jan 2021 23:29:27 -0500
Subject: [PATCH] tftpd: recvfile: avoid closing the file twice

The close_stream function calls fclose, so don't call it again.

This resolves an abort in glibc:

    Message: Process 1038079 (tftpd) of user 65534 dumped core.

    Stack trace of thread 1038079:
    #0  0x00007f5f650ed204 raise (libc.so.6 + 0x39204)
    #1  0x00007f5f650d6547 abort (libc.so.6 + 0x22547)
    #2  0x00007f5f6512f25f n/a (libc.so.6 + 0x7b25f)
    #3  0x00007f5f651372fa n/a (libc.so.6 + 0x832fa)
    #4  0x00007f5f65138dc2 n/a (libc.so.6 + 0x84dc2)
    #5  0x00007f5f65124b2f fclose (libc.so.6 + 0x70b2f)
    #6  0x000055571a50de73 recvfile (tftpd + 0x2e73)
    #7  0x000055571a50e064 tftp (tftpd + 0x3064)
    #8  0x000055571a50e387 tftpd_inetd (tftpd + 0x3387)
    #9  0x000055571a50e50f main (tftpd + 0x350f)
    #10 0x00007f5f650d7e6d __libc_start_main (libc.so.6 + 0x23e6d)
    #11 0x000055571a50d3ca _start (tftpd + 0x23ca)

Fixes: 5d6be65 ("tftpd: remove global variables by using a run state struct")

Reviewed-by: Petr Vorel <pvorel@suse.cz>
Signed-off-by: Mike Gilbert <floppym@gentoo.org>
---
 tftpd/tftpd.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/tftpd/tftpd.c b/tftpd/tftpd.c
index 42998f9b..a09d32ba 100644
--- a/tftpd/tftpd.c
+++ b/tftpd/tftpd.c
@@ -387,7 +387,6 @@ void recvfile(struct run_state *ctl, struct formats *pf)
 	write_behind(ctl->file, pf->f_convert);
 	if (close_stream(ctl->file))
 		syslog(LOG_ERR, "tftpd: write error: %s\n",  strerror(errno));
-	fclose(ctl->file);		/* close data file */
 
 	ap->th_opcode = htons((uint16_t)ACK);	/* send the "final" ack */
 	ap->th_block = htons(block);