Module Name: src Committed By: martin Date: Mon Jun 14 11:28:28 UTC 2021
Modified Files: src/usr.bin/ftp [netbsd-9]: ftp.c util.c Log Message: Pull up following revision(s) (requested by lukem in ticket #1291): usr.bin/ftp/ftp.c: revision 1.169 usr.bin/ftp/util.c: revision 1.161 ftp: exit if lostpeer invoked by a signal lostpeer() calls too many async-unsafe functions (both directly and indirectly) to close and cleanup the remote connections, so just exit after the cleanup if invoked by a signal. Reported in private mail by Qi Hou. May also resolve a crash reported by Thomas Klausner. To generate a diff of this commit: cvs rdiff -u -r1.168.2.2 -r1.168.2.3 src/usr.bin/ftp/ftp.c cvs rdiff -u -r1.160 -r1.160.2.1 src/usr.bin/ftp/util.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/ftp/ftp.c diff -u src/usr.bin/ftp/ftp.c:1.168.2.2 src/usr.bin/ftp/ftp.c:1.168.2.3 --- src/usr.bin/ftp/ftp.c:1.168.2.2 Mon Jun 14 11:22:16 2021 +++ src/usr.bin/ftp/ftp.c Mon Jun 14 11:28:28 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: ftp.c,v 1.168.2.2 2021/06/14 11:22:16 martin Exp $ */ +/* $NetBSD: ftp.c,v 1.168.2.3 2021/06/14 11:28:28 martin Exp $ */ /*- * Copyright (c) 1996-2021 The NetBSD Foundation, Inc. @@ -92,7 +92,7 @@ #if 0 static char sccsid[] = "@(#)ftp.c 8.6 (Berkeley) 10/27/94"; #else -__RCSID("$NetBSD: ftp.c,v 1.168.2.2 2021/06/14 11:22:16 martin Exp $"); +__RCSID("$NetBSD: ftp.c,v 1.168.2.3 2021/06/14 11:28:28 martin Exp $"); #endif #endif /* not lint */ @@ -2074,7 +2074,7 @@ gunique(const char *local) * needs to get back to a known state. */ static void -abort_squared(int dummy) +abort_squared(int signo) { char msgbuf[100]; size_t len; @@ -2084,7 +2084,7 @@ abort_squared(int dummy) len = strlcpy(msgbuf, "\nremote abort aborted; closing connection.\n", sizeof(msgbuf)); write(fileno(ttyout), msgbuf, len); - lostpeer(0); + lostpeer(signo); siglongjmp(xferabort, 1); } Index: src/usr.bin/ftp/util.c diff -u src/usr.bin/ftp/util.c:1.160 src/usr.bin/ftp/util.c:1.160.2.1 --- src/usr.bin/ftp/util.c:1.160 Sat Jun 22 23:40:53 2019 +++ src/usr.bin/ftp/util.c Mon Jun 14 11:28:28 2021 @@ -1,7 +1,7 @@ -/* $NetBSD: util.c,v 1.160 2019/06/22 23:40:53 christos Exp $ */ +/* $NetBSD: util.c,v 1.160.2.1 2021/06/14 11:28:28 martin Exp $ */ /*- - * Copyright (c) 1997-2009 The NetBSD Foundation, Inc. + * Copyright (c) 1997-2020 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation @@ -64,7 +64,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: util.c,v 1.160 2019/06/22 23:40:53 christos Exp $"); +__RCSID("$NetBSD: util.c,v 1.160.2.1 2021/06/14 11:28:28 martin Exp $"); #endif /* not lint */ /* @@ -324,9 +324,10 @@ intr(int signo) /* * Signal handler for lost connections; cleanup various elements of * the connection state, and call cleanuppeer() to finish it off. + * This function is not signal safe, so exit if called by a signal. */ void -lostpeer(int dummy) +lostpeer(int signo) { int oerrno = errno; @@ -356,6 +357,9 @@ lostpeer(int dummy) proxflag = 0; pswitch(0); cleanuppeer(); + if (signo) { + errx(1, "lostpeer due to signal %d", signo); + } errno = oerrno; }