diff --git a/.github/workflows/sshd-test.yml b/.github/workflows/sshd-test.yml index a58db6ab..13d33710 100644 --- a/.github/workflows/sshd-test.yml +++ b/.github/workflows/sshd-test.yml @@ -97,3 +97,12 @@ jobs: run: | git log -3 sudo ./run_all_sshd_tests.sh + + # could use optimization with caching + - name: Test memory after close down + working-directory: ./wolfssh/ + run: | + sudo apt-get install valgrind + touch sshd_config.txt + ./configure --enable-all LDFLAGS="-L${{ github.workspace }}/build-dir/lib" CPPFLAGS="-I${{ github.workspace }}/build-dir/include -DWOLFSSH_NO_FPKI -DWOLFSSH_NO_SFTP_TIMEOUT -DWOLFSSH_MAX_SFTP_RW=4000000 -DMAX_PATH_SZ=120" --enable-static --disable-shared && make + sudo timeout --preserve-status -s 2 5 valgrind --error-exitcode=1 --leak-check=full ./apps/wolfsshd/wolfsshd -D -f sshd_config -h ./keys/server-key.pem -d -p 22222 diff --git a/apps/wolfsshd/wolfsshd.c b/apps/wolfsshd/wolfsshd.c index 5dad0343..9ea7ed77 100644 --- a/apps/wolfsshd/wolfsshd.c +++ b/apps/wolfsshd/wolfsshd.c @@ -2468,9 +2468,11 @@ static int StartSSHD(int argc, char** argv) struct sockaddr_in6 clientAddr; socklen_t clientAddrSz = sizeof(clientAddr); #endif - conn = (WOLFSSHD_CONNECTION*)WMALLOC(sizeof(WOLFSSHD_CONNECTION), NULL, DYNTYPE_SSHD); + conn = (WOLFSSHD_CONNECTION*)WMALLOC(sizeof(WOLFSSHD_CONNECTION), + NULL, DYNTYPE_SSHD); if (conn == NULL) { - wolfSSH_Log(WS_LOG_ERROR, "[SSHD] Failed to malloc memory for connection"); + wolfSSH_Log(WS_LOG_ERROR, + "[SSHD] Failed to malloc memory for connection"); break; } @@ -2536,9 +2538,13 @@ static int StartSSHD(int argc, char** argv) } ret = NewConnection(conn); } + else { + XFREE(conn, NULL, DYNTYPE_SSHD); + } #ifdef _WIN32 /* check if service has been shutdown */ - if (isDaemon && WaitForSingleObject(serviceStop, 0) == WAIT_OBJECT_0) { + if (isDaemon && WaitForSingleObject(serviceStop, 0) == + WAIT_OBJECT_0) { quit = 1; } #endif