# HG changeset patch # User Matt Johnston # Date 1611928076 -28800 # Node ID 685b47d8faf785da2e65b4246e27b8b0fbd7362b # Parent 42745af83b7d5be70460c19cb7a5d98f649b7127 fuzz: wrap kill() diff -r 42745af83b7d -r 685b47d8faf7 fuzz-wrapfd.h --- a/fuzz-wrapfd.h Wed Feb 15 13:53:04 2017 +0100 +++ b/fuzz-wrapfd.h Fri Jan 29 21:47:56 2021 +0800 @@ -1,6 +1,7 @@ #ifndef FUZZ_WRAPFD_H #define FUZZ_WRAPFD_H +#include "includes.h" #include "buffer.h" enum wrapfd_mode { @@ -21,5 +22,6 @@ int wrapfd_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); int wrapfd_close(int fd); +int fuzz_kill(pid_t pid, int sig); #endif // FUZZ_WRAPFD_H diff -r 42745af83b7d -r 685b47d8faf7 fuzz.h --- a/fuzz.h Wed Feb 15 13:53:04 2017 +0100 +++ b/fuzz.h Fri Jan 29 21:47:56 2021 +0800 @@ -59,6 +59,7 @@ #define write(fd, buf, count) wrapfd_write(fd, buf, count) #define read(fd, buf, count) wrapfd_read(fd, buf, count) #define close(fd) wrapfd_close(fd) +#define kill(pid, sig) fuzz_kill(pid, sig) #endif // FUZZ_SKIP_WRAP struct dropbear_fuzz_options { diff -r 42745af83b7d -r 685b47d8faf7 fuzz/fuzz-wrapfd.c --- a/fuzz/fuzz-wrapfd.c Wed Feb 15 13:53:04 2017 +0100 +++ b/fuzz/fuzz-wrapfd.c Fri Jan 29 21:47:56 2021 +0800 @@ -258,3 +258,15 @@ return ret; } +int fuzz_kill(pid_t pid, int sig) { + if (fuzz.fuzzing) { + TRACE(("fuzz_kill ignoring pid %d signal %d", (pid), sig)) + if (sig >= 0) { + return 0; + } else { + errno = EINVAL; + return -1; + } + } + return kill(pid, sig); +} diff -r 42745af83b7d -r 685b47d8faf7 svr-chansession.c --- a/svr-chansession.c Wed Feb 15 13:53:04 2017 +0100 +++ b/svr-chansession.c Fri Jan 29 21:47:56 2021 +0800 @@ -423,12 +423,14 @@ /* Send a signal to a session's process as requested by the client*/ static int sessionsignal(const struct ChanSess *chansess) { + TRACE(("sessionsignal")) int sig = 0; char* signame = NULL; int i; if (chansess->pid == 0) { + TRACE(("sessionsignal: done no pid")) /* haven't got a process pid yet */ return DROPBEAR_FAILURE; } @@ -446,12 +448,14 @@ m_free(signame); + TRACE(("sessionsignal: pid %d signal %d", (int)chansess->pid, sig)) if (sig == 0) { /* failed */ return DROPBEAR_FAILURE; } if (kill(chansess->pid, sig) < 0) { + TRACE(("sessionsignal: kill() errored")) return DROPBEAR_FAILURE; }