]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: save_errno wrappers inside two small signal handlers that
authorderaadt@openbsd.org <deraadt@openbsd.org>
Wed, 26 Jun 2024 23:14:14 +0000 (23:14 +0000)
committerDamien Miller <djm@mindrot.org>
Thu, 27 Jun 2024 22:34:49 +0000 (08:34 +1000)
perform system calls, for systems with libc that do perform libc sigtramps.
ok djm markus

OpenBSD-Commit-ID: 7749b56419a7c9dcfe4c6c04811e429813346c62

scp.c
sftp.c

diff --git a/scp.c b/scp.c
index 492dace1233b4895779b21e6d8f201942791b013..0779c3c2b7c4b0765ce0dedcc560a13831c8952f 100644 (file)
--- a/scp.c
+++ b/scp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: scp.c,v 1.260 2023/10/11 05:42:08 djm Exp $ */
+/* $OpenBSD: scp.c,v 1.261 2024/06/26 23:14:14 deraadt Exp $ */
 /*
  * scp - secure remote copy.  This is basically patched BSD rcp which
  * uses ssh to do the data transfer (instead of using rcmd).
@@ -222,9 +222,11 @@ suspone(int pid, int signo)
 static void
 suspchild(int signo)
 {
+       int save_errno = errno;
        suspone(do_cmd_pid, signo);
        suspone(do_cmd_pid2, signo);
        kill(getpid(), SIGSTOP);
+       errno = save_errno;
 }
 
 static int
diff --git a/sftp.c b/sftp.c
index c080fba5d496c39ebb01a8cfbaec44a9ddae6af1..360c5004a2b5104794d838ff6cd620326d634307 100644 (file)
--- a/sftp.c
+++ b/sftp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sftp.c,v 1.238 2024/04/30 06:16:55 djm Exp $ */
+/* $OpenBSD: sftp.c,v 1.239 2024/06/26 23:14:14 deraadt Exp $ */
 /*
  * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
  *
@@ -234,12 +234,14 @@ killchild(int signo)
 static void
 suspchild(int signo)
 {
+       int save_errno = errno;
        if (sshpid > 1) {
                kill(sshpid, signo);
                while (waitpid(sshpid, NULL, WUNTRACED) == -1 && errno == EINTR)
                        continue;
        }
        kill(getpid(), SIGSTOP);
+       errno = save_errno;
 }
 
 static void